C语言实现顺序线性表的表示、插入、删除
来源:互联网 发布:mac系统怎么装win7 编辑:程序博客网 时间:2024/05/16 14:31
在线性表中,数据元素在逻辑上具有一对一的关系,线性表的顺序表示是指用一组地址连续的存储单元依次存储线性表的数据元素。我们可以这样理解,线性表的顺序存储结构其实是用计算机内“物理位置相邻”来表示线性表中数据元素之间的逻辑关系。因为内存地址是连续的,我们恰好可以通过这种特点来表示线性表,这样顺序线性表的特点是:数据元素不仅逻辑上相邻,在物理地址上也是相邻的。同样我们只要知道了存储顺序线性表的基地址,就可以随机的存取数据元素,所以顺序线性表是一种随机存取的存储结构。而程序设计语言中的数组也满足随机存取的特性,所以可以用C语言中的数组来描述线性表的顺序存储结构。
应当要注意的是,线性表是可变长的,所以得用动态分配数组去表示。我们可以通过结构体来定义顺序线性表的存储结构,定义一个数组指针elem来指向动态分配内存函数malloc所分配的地址,用一个整数length来记录当前线性表的长度,除此之外,还要定义一个保存顺序表当前分配的存储空间大小的变量listsize,当因插入元素空间不足时,可以进行再分配。以下是定义的具体代码:
#include<stdio.h>#include<stdlib.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2 //溢出typedef int Status;/**使用c语言中的一维数组来描述顺序线性表**/#define LIST_INIT_SIZE 5 //线性表存储空间的初始分配量#define LISTINCREMENT 10 //线性表存储空间的分配增量/**定义线性表的结构**/typedef struct{ int * elem; //存储空间基地址(数组指针,指向预分配数组的首地址) int length; //当前线性表的长度 int listsize; //当前分配的存储容量}SqList;
以下是构造一个空的线性表
/**func:InitList()*desc:构造一个空的线性表L*@param:&L SqList*@return OK int*/Status InitList(SqList &L){ L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int)); //动态开辟一维数组 if(!L.elem) exit(OVERFLOW); //存储分配失败 L.length=0; //空表长度初始化为0 L.listsize=LIST_INIT_SIZE; //存储的初始容量 return OK;}
在顺序线性表L中第i个位置插入新的元素e
/**fun:ListInsert_Sq()*desc:在顺序线性表L中第i个位置之前插入新的元素e*@param:&L SqList*@param: i int*@param: e int*@ret OK int*/Status ListInsert_Sq(SqList &L,int i,int e){ //i需要满足1<=i<=ListLength_Sq(L)+1 if(i<1||i>L.length+1) return ERROR; if(L.length>=L.listsize){ //当前存储空间已满,增加分配 int *newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int)); if(!newbase) exit(OVERFLOW); //存储分配失败 L.elem=newbase; //新地址 L.listsize+=LISTINCREMENT; //增加存储容量 } int *q=&(L.elem[i-1]); //q为插入的位置(注意数组的下标是从0开始计数) for(int *p=&(L.elem[L.length-1]);p>=q;p--) *(p+1)=*p; //插入位置及之后的元素后移 *q=e; //插入e L.length+=1; //表长增1 return OK;}
在顺序线性表L中删除第i个元素,并用e返回其值
/**fun:ListDelete_Sq()*desc:在顺序线性表L中删除第i个元素,并用e值返回*@param:&L SqList*@param: i int*@param: e int*@ret OK int*/Status ListDelete_Sq(SqList &L,int i,int &e){//i的合法性为1<=i<=ListLength_Sq(L) if(i<1||i>L.length) return ERROR; e=L.elem[i-1]; //把被删除的元素赋给e int *p=&L.elem[i-1]; //指针p为被删除元素的位置 for(int *q=p+1;q<=p+(L.length-i);q++) *(q-1)=*q; //被删除位置之后的元素都往前移 L.length-=1; //表长减一 return OK;}
阅读全文
1 0
- C语言实现顺序线性表的表示、插入、删除
- C语言:实现线性表基本表示(数组元素的删除,插入,合并)
- 线性表的顺序表示(C语言实现)
- 线性表的顺序表示和实现(C语言描述)
- 线性表的顺序表示及实现(C语言编写)
- 线性表的输入输出插入删除查找(顺序表示)
- C语言实现线性表的插入和删除操作
- 【数据结构】线性表的顺序表示和实现,实现插入和删除算法,并且实现顺序表的合并
- C语言:线性顺序结构(数组)的插入,删除
- C语言顺序表的插入、删除、查找操作实现
- C语言实现顺序表的初始化,插入,删除,查找
- C语言 数据结构 线性表的顺序表示
- [C语言][数据结构]基础的线性表的顺序表示和实现
- 线性表的顺序实现(C语言)
- 线性表的顺序实现(c语言)
- 线性表之<顺序表sqlist>的储存及插入、删除-C代码实现
- 线性表的添加、删除、插入功能的顺序实现
- 线性表c语言实现----初始化插入删除
- 单例模式
- oracle的left join和inner join的区别
- 安装tensorflow,查看tensorflow版本,在终端退出python的命令
- DirectX 12 持续整理 ——4.Direct3D 初始化
- 开发html5六人九人十人十二人牛牛源码安装搭建
- C语言实现顺序线性表的表示、插入、删除
- 表达式17.11.14
- malloc()动态分配内存
- 向filter过滤器中的request对象添加额外的参数
- Edgware.RC1中ZuulFallbackProvider的改进
- 搭建(增加) jenkins slave 机器
- C++ STL一一迭代器配接器
- 大数据路线
- 控制软件版本