链表之顺序表
顺序表的存储结构
typedef struct{
ElemType data[MaxSize]; //定义顺序表数据
int length; //记录顺序表长度
}SqList;
顺序表的插入
在第i个位置插入数据e
bool ListInsert(SqList &L,int i,int e) //插入
{
if(i<1||i>L.length+1) //i的输入不合法
return false;
if(L.length+1>MaxSize) //若插入后总长度大于MaxSize,插入失败
return false;
for(int j=L.length;j>=i;j--) //后移i位置后元素
L.data[j]=L.data[j-1];
L.data[i-1]=e; //i位置元素插入e
L.length++; //长度加+1
return true;
}
顺序表的删除
bool ListDelete(SqList &L,int i,int &e) //删除
{
if(i<1||i>L.length) //i的输入不合法
return false;
e=L.data[i-1]; //删除该位置元素
for(int j=i-1;j<L.length;j++) //后续元素前移
L.data[j]=L.data[j+1];
L.length--; //长度-1
return true;
}
顺序表的查找
int LocateElem(SqList L,int e) //查找
{
for(int i=0;i<L.length;i++)
{
if(L.data[i]==e)
return i+1; //此处return可代替break,查找成功返回元素所在位置
}
return 0; //查找失败返回0
}
顺序表的特点
顺序表特质
(1)最大特点:随机存取;
(2)插入、删除需要大量移动元素,但存储密度高;
单链表
单链表的存储结构
typedef struct LNode{
int data; //数据域
struct LNode *next; //指针域(下地址的结构应是与链表相同的指针变量),不能直接用*LinkList,因为还没遍历
}LNode,*LinkList;
头插法
LinkList headinsert(LinkList &L)
{
L=(LNode*)malloc(sizeof(LNode));
L->next=NULL;
int x;
LNode *s;
scanf("%d",&x);
while(x!=9999)
{
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next=s;
scanf("%d",&x);
}
return L;
}
尾插法
LinkList tailinsert(LinkList &L)
{
L=(LNode*)malloc(sizeof(LNode));
LNode *s,*r;
int x;
r=L;
scanf("%d",&x);
while(x!=9999)
{
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=NULL;
return L;
}
单链表常见操作
//按位查找
LinkList GetElem1(LinkList L,int i)
{
if(i<1)
return NULL; //i非法返回空
int j=1;
LinkList p=L->next; //p初始指向首部
while(j<i&&p!=NULL) //当j到达i且p不指向空时结束
{
p=p->next; //每次指向下一个
j++;
}
return p;
}
//按值查找
LinkList GetElem2(LinkList L,int e)
{
LinkList p=L->next;
while(p!=NULL&&p->data!=e)
{
p=p->next;
}
return p;
}
//插入
LinkList InsertElem(LinkList& L,int i,int e)
{
LinkList p=GetElem1(L,i-1);
LinkList s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return L;
}
//删除
LinkList DeleteElem(LinkList& L,int i)
{
LinkList p=GetElem1(L,i-1);
LinkList q=p->next;
p->next=q->next;
free(q);
}

1万+

被折叠的 条评论
为什么被折叠?



