数据结构——线性表顺序表示详解

目录

1.线性表的类型定义

2.基本操作

3.线性表的存储结构

4.补充

1.元素类型说明

2.数组定义​编辑

3.c语言的内存动态分配

4.c++的动态存储分配

5.c++中的参数传递

引用类型作参数

6.顺序表基本操作的实现

1.线性表的初始化

代码示例:

2.销毁线性表,清空线性表

​ 代码示例:

3.求线性表长度,判断线性表是否为空

代码示例:

4.顺序表的取值

代码示例:

5.顺序表的查找

代码示例:

6.顺序表的插入

代码示例:

​7.顺序表的删除

代码示例:

7.顺序表的操作算法分析

8.总的代码及示例


1.线性表的类型定义

相当于一个数组

2.基本操作

3.线性表的存储结构

4.补充

1.元素类型说明

2.数组定义

3.c语言的内存动态分配

计算出所需的大小再将它的指针赋值给data

4.c++的动态存储分配

5.c++中的参数传递

引用类型作参数

使用引用后传进函数的就是a和b本身,并没有重新复制一份

6.顺序表基本操作的实现

1.线性表的初始化

代码示例:

cpp 复制代码
typedef struct{
	int *elem;
	int length;
}sqlist;

bool init_sqlist(sqlist &l)
{
	l.elem = new int[100];
	if(!l.elem) exit(-2);
	l.length = 0;
	return 1;
}

2.销毁线性表,清空线性表

代码示例:

cpp 复制代码
void destory_list(sqlist &l)
{
	if(l.elem) delete l.elem;
}

void clear_list(sqlist &l)
{
	l.length = 0;
}

3.求线性表长度,判断线性表是否为空

代码示例:

cpp 复制代码
int getlength(sqlist &l)
{
	return l.length;
}

bool isempty(sqlist &l)
{
	if(l.length == 0) return 1;
	else return 0;
}

4.顺序表的取值

代码示例:

cpp 复制代码
int getelem(sqlist &l,int i,int &e)
{
	if(i < 1 || i > l.length) return -1;
	e = l.elem[i-1];
	return 1;
}

5.顺序表的查找

代码示例:

cpp 复制代码
int locateelem(sqlist & l,int e)
{
	for(int i = 0; i < l.length; i++)
	{
		if(l.elem[i] == e) return i + 1;
	}
	return 0;
}

6.顺序表的插入

代码示例:

cpp 复制代码
int insert(sqlist &l,int i,int e)
{
	if(i < 1 || i > l.length + 1) return 0;
	if(l.length == 100) return 0;
	for(int j = l.length - 1;j >= i - 1;j--)
	{
		l.elem[j + 1] = l.elem[j];
	}
	l.elem[i - 1] = e;
	l.length ++;
	return 1;
}

7.顺序表的删除

代码示例:

cpp 复制代码
int deletelist(sqlist &l,int i)
{
	if(i < 1 || i > l.length) return 0;
	for(int j = i; j <= l.length - 1; j++)
	{
		l.elem[j - 1] = l.elem[j];
	}
	l.length--;
	return 1;
}

7.顺序表的操作算法分析

8.总的代码及示例

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

typedef struct{
	int *elem;
	int length;
}sqlist;

void init_sqlist(sqlist &l)
{
	l.elem = new int[100];
	l.length = 0;
}

void destory_list(sqlist &l)
{
	if(l.elem) delete l.elem;
}

void clear_list(sqlist &l)
{
	l.length = 0;
}

int getlength(sqlist &l)
{
	return l.length;
}

bool isempty(sqlist &l)
{
	if(l.length == 0) return 1;
	else return 0;
}

int getelem(sqlist &l,int i,int &e)
{
	if(i < 1 || i > l.length) return -1;
	e = l.elem[i-1];
	return 1;
}

int locateelem(sqlist & l,int e)
{
	for(int i = 0; i < l.length; i++)
	{
		if(l.elem[i] == e) return i + 1;
	}
	return 0;
}

int insert(sqlist &l,int i,int e)
{
	if(i < 1 || i > l.length + 1) return 0;
	if(l.length == 100) return 0;
	for(int j = l.length - 1;j >= i - 1;j--)
	{
		l.elem[j + 1] = l.elem[j];
	}
	l.elem[i - 1] = e;
	l.length ++;
	return 1;
}

bool deletelist(sqlist &l,int i)
{
	if(i < 1 || i > l.length) return 0;
	for(int j = i; j <= l.length - 1; j++)
	{
		l.elem[j - 1] = l.elem[j];
	}
	l.length--;
	return 1;
}

int main()
{
	sqlist l;
	init_sqlist(l);
	cout << getlength(l) << endl;
	insert(l,1,1);
	insert(l,2,10);
	insert(l,3,100);
	insert(l,4,1000);
	insert(l,5,10000);
	cout << locateelem(l,100) << endl;
	cout << locateelem(l,10000) << endl;
	
	cout << getlength(l) << endl;
	deletelist(l,3);
	cout << getlength(l) << endl;
	
	return 0;
}

相关推荐
cpp_25019 小时前
P2708 硬币翻转
数据结构·c++·算法·题解·洛谷
程序猿阿伟9 小时前
《Python复杂结构静态分析秘籍:递归类型注解的深度实践指南》
java·数据结构·算法
UIUI10 小时前
list_for_each_entry
linux·数据结构·链表
豆沙沙包?13 小时前
2026年--Lc334-2130. 链表最大孪生和(链表转数组)--java版
java·数据结构·链表
Python_Study202514 小时前
制造业数据采集系统选型指南:从技术挑战到架构实践
大数据·网络·数据结构·人工智能·架构
SmoothSailingT15 小时前
408每日一题——数据结构
数据结构·考研·408
im_AMBER18 小时前
Leetcode 99 删除排序链表中的重复元素 | 合并两个链表
数据结构·笔记·学习·算法·leetcode·链表
s砚山s19 小时前
代码随想录刷题——二叉树篇(十三)
数据结构·算法
ulias21219 小时前
AVL树的实现
开发语言·数据结构·c++·windows
黎雁·泠崖19 小时前
二叉树知识体系全梳理:从基础到进阶一站式通关
c语言·数据结构·leetcode