typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,LinkList *;
//带头结点的单链表的初始化
bool InitList(LinkList &L)
{
L = (LinkList *)malloc(sizeof(LinkList));
if(L==NULL)
return false;
L->next = NULL;
return true;
}
//带头结点的单链表判空
bool EmptyList(LinkList L)
{
return(L->next==NULL);
}
//带头结点头插法建立建立单链表
LinkList CreatLinkList—_t(LinkList &L)
{
LNode *p = L;
int x;
cin>>x;
while(x!=99999)
{
LNode *s = (LNode *)malloc(sizeof(LNode));
s->data = x;
s->next = p->next;
p->next = s;
p = L;
cin>>x;
}
return L;
}
//带头结点的尾插法
LinkList CreatLinkList_w(LinkList &L)
{
int x;
cin>>x;
LNode *r=L;
while(x!=8888)
{
LNode *s = (LNode *)malloc(sizeof(LNode));
s->data = x;
r->next = s;
s->next =NULL;
r = s;
cin>>x;
}
return L;
}
//带头结点的按位插入(在第i个位置插入)
bool InsertLinkList(LinkList &L,int i,Elemtype e)
{
if(i<1)
return false;
else
{
int j = 0;//头结点为第零个 j记录查找到第几个位置,我们要找的就是的i-1个位置
LNode *p=L;
while(p!=NULL&&j<i-1)
{
p= p->next;
j++;
}
if(p==NULL)
return false;
else
{
LNode *s = (LNode *)malloc(sizeof(LNode));
s ->data = e;
s->next = p->next ;
p->next = s;
}
}
return true;
}
//带头结点的指定结点的按位删除
bool deleteLinkList(LinkList &L,int i,ElmeType e)
{
if(i<1)
return false;
int j = 0;
LNode *p = L;
while(p!=NULL&&j<i-1)
{
p = p->next;
j++;
}
if(p == NULL)
return false;
else
e = p ->data;
LNode *q=q->next;
p->next =q->next;
free(q);
return true;
}
//带头结点指定结点的后插操作
bool InsertLinkList_back(LNode *P,ElemType e)
{
if(P==NULL)
return false;
LNode *s=(LNode *)malloc(sizeof(LNode));
s->data = e;
s->next = p->next ;
p->next = s;
return true;
}
//带头结点的指定结点前插操作
bool InsertLinkList_Pro(LNode *p,ElemType e)
{
LNode *s=(LNode *)malloc(sizeof(LNode));
s->next = p->next;
p->next = s;
s->data = p->data;
p->data = e;
return true;
}
//带头结点的指定结点的删除
bool DeleteLinkList_LNode_pro(LNode *p,ElemType e)
{
if(p==NULL)
return flase;
LNode *q=p->next;
e = p-data;
p->data = q->data;
p->next = q->next;
free(q);
return true;
}
//销毁带头结点的链表
void DestroyLinkList(LinkList &L)
{
if(L==NULL)
return 0;
LinkList p = L;
while(p!=NULL)
{
L = L->next;
free(p);
p= L;
}
}
//李春葆版
void DestroyList(LinkNode &L)
{
LinkNode *pre =L,*p = L->next;
while(p!=NULL)
{
free(pre);
pre = p;
p = pre ->next;//一样的p = p->next;
}
free(pre);
}
学习c++带头结点的单链表基本操作(王道数据结构单链表链式存储)
于 2022-04-27 11:15:07 首次发布