2024/8/8
链表
链表是什么
链表是一种用于存储数据的数据结构,通过如链条一般的指针来连接元素。它的特点是插入与删除数据十分方便,但寻找与读取数据的表现欠佳。
创建单向链表
typedef int ElemType;
typedef struct LNode
{
ElemType data;//数据
LNode *next;//指针
}LNode,*LinkList;
在单项链表头部添加结点
void List_HeadInstert(LinkList &L)//在头部添加结点
{
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
ElemType x;
cin>>x;//输入数据
LinkList s;
while(x!=999999)
{
s=(LinkList)malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next=s;
cin>>x;//输入
}
}
在单项链表尾部添加结点
void List_TailInstert(LinkList &L)//尾插
{
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
ElemType x;
cin>>x;
LinkList s,r=L;
while(x!=999999)
{
s=(LinkList)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
cin>>x;
}
}
根据值查找结点
LinkList GetElem(LinkList L,int i)
{
while(L)
{
if(L->data==i)
return L;
L=L->next;
}
return NULL;
}
根据序号找结点
LinkList GetElem1(LinkList L,int Searcpos)
{
LinkList p;
p=L->next;
int j=0;
if(p==NULL) return NULL;
while(p&&(j<Searcpos))//遍历结点,直到j=要搜索的结点
{
p=p->next;
j=j+1;
}
if(p!=NULL&&j==Searcpos)
return p;
return NULL;
}
删除单链表中的一个结点
设待删除结点为 p,从链表中删除它时,将 p 的下一个结点 p->next 的值覆盖给 p 即可,与此同时更新 p 的下下个结点。
bool ListDel(LinkList L,int pos)
{
LinkList p,s;
int j;
s=GetElem1(L,pos-2);
if(s->next==NULL) return false;
p=s->next;
s->next=s->next->next;
free(p);
return true;
}
添加结点
bool ListInsert(LinkList &L,int pos,ElemType element)
{
LinkList p=GetElem1(L,pos-1);//找到要添加结点的前一个结点
if(p==NULL) return false;
LinkList q;//新节点
q=(LinkList)malloc(sizeof(LNode));
q->next=p->next;
p->next=q;
q->data=element;
return true;
}