线性表 linear list
数据项 item
记录 record
文件 file
顺序映像 sequential mapping
结点 node
线性表的顺序存储结构
插入和删除步骤
1:合法性检查(指针,位置i)
2:遍历找到位置
3:建立新结点(mallco),插入或者删除结点;
Tip:
元素插入需后移,用--遍历元素删除需前移,用++遍历
#define MAXSIZE 20//存储空间的初始分配量
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Elemtype;
typedef int Status;
typedef struct{
Elemtype data[MAXSIZE];
int length;
}SqList;
Status GetElem(SqList L,int i,Elemtype *e)
{
if(L.length==0||i<1||i>L.length)
return ERROR;
*e=L.data[i-1];
return OK;
}
Status ListInsert(SqList *L,int i,Elemtype e){
if(L->length==MAXSIZE)//1:合法性检查
return ERROR;
if(i<1||i>L->length+1)//i值是否合法
return ERROR;
if(i<=L->length)//如果插入位置不在表尾
{
for(int k=L->length-1;k>=i-1;k--)
l->data[k+1]=l->data[k];/2:元素后移
l->data[i-1]=e;//3:新元素插入
l->length++;
return OK;
}
}
Status ListDelte(SqList *L,int i,Elemtype *e){
if(L->length=0)//线性表为空
return ERROR;
if(i<1||i>l->length)//删除位置不存在
return ERROR;
*e=L->data[i-1];//通过指针返回删除的值
if(i<L->length)//删除位置不在表尾
{for(int k =i;k<=length-1;k++)
//注意与插入的区别;
L->data(k-1)=L->date(k);/删除位置后面的前移
}
L->length--;
return OK;
}
线性表的链式存储结构
//线性表的链式存储结构
typedef struct Node{
Elemtype date;
struct Node *next;
}Node;
typedef struct Node *LinkeList;//
Status GetElem (LinkeList L,int i,Elemtype *e){
LinkeList p=L->next;//1:初始化
int j=1;
while(p&&j<i)
j++;
p=p->next;//2:遍历
}
if(!p||j>i)
return ERROR;//3:i值合法性检测;
*e=p->date;//4:返回i个元素的值
return OK;
}
Status ListInsert(LinkeList L,int i,Elemtype e){
LinkeList p=L;//
int j=1;
while(p&&j<i){//1:寻找结点i
p=p->next;
j++;
}
if(!p||j>i)
return ERROR;//2:i的合法性检查;
LinkeList s=(LinkeList)malloc(sizeof(Node));//3:生成新结点
s->next=p->next;
p->next=s;
s->date=e;//4:链接新的结点
}
Status ListDelte(LinkeList L,int i,Elemtype *e){
LinkeList p=L;
int j=1;
while(p->next&&j<i){//1:寻找结点i
p=p->next;
j++;
}
if(!p->next||j>i)
return ERROR;//2:i的合法性检查;
LinkeList s=p->next;
p->next=s->next;
*e=s->date;
free(s);//3:删除结点
}
版权声明:本文为weixin_46432495原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。