链表:
链表的创建:
1;需要一个结点结构:
typedef struct code
{
struct code* Node;
int num;
}Lemon;
链表的创建方法有基本四种:
1. 不带头结点的头插法
2. 不带头结点的尾插法
3. 带头结点的头插法
4. 带头结点的尾插法
这里提醒一下:创建一个结点,往往会在链表的末端而不是前端。
不带头结点的头插法:
Lemon* LemonCreat()
{
int b;
Lemon *p,*heat;
heat=NULL;
for(int i=0;;i++)
{
int c;
p=(Lemon*)malloc(sizeof(Lemon));
cin >> c;
if(c==-1)break;
p->num=c;
p->Node=heat;
heat=p;
}
return heat;
}
不带头结点的尾部插法:
Lemon* LemonCreat()
{
int b;
Lemon *p,*heat,*rear;
heat=(Lemon*)malloc(sizeof(Lemon));
rear=heat;
for(int i=0;;i++)
{
p=(Lemon*)malloc(sizeof(Lemon));
int c;
cin >> c;
if(c==-1)break;
p->num=c;
rear->Node=p;
rear=p;
}
rear->Node=NULL;
}
带头结点的头插法:
Lemon* LemonCreat()
{
int b;
Lemon *p,*heat;
heat=(Lemon*)malloc(sizeof(Lemon));
heat->Node=NULL;
for(int i=0;;i++)
{
p=(Lemon*)malloc(sizeof(Lemon));
int c;
cin >> c;
if(c==-1)break;
p->num=c;
p->Node=heat->Node;
heat->Node=p;
}
return heat;
}
带头结点的尾部插法:
Lemon* LemonCreat()
{
Lemon *p,*heat,*rear;
int b;
cin >> b;
heat=(Lemon*)malloc(sizeof(Lemon));
rear=heat;
for(int i=0;i<b;i++)
{
p=(Lemon*)malloc(sizeof(Lemon));
int c;
cin >> c;
p->num=c;
rear->Node=p;
rear=p;
}
rear->Node=NULL;
return heat;
}
带头结点的优点:
1. 由于开始的指针是存于头结点中,在进行插入与删除等操作的时候,
方便。
2. 无论链表是否为空,其头指针是指向头结点在的非空指针(空表中头
结点的指针域为空),因此空表和非空表的处理也就统一了。
链表的插入:
Lemon* Lemonadd(Lemon *p,int n,int m)
{
Lemon *q,*heat;
heat=p;
for(int i=0;i<=b;i++)
{
if(i==n)
{
q=(Lemon*)malloc(sizeof(Lemon));
q->num=m;
q->Node=p->Node;
p->Node=q;
}
else
{
p=p->Node;
}
}
return heat;
}
链表的删除:
Lemon* Lemonpop(Lemon *p,int n)
{
Lemon *q,*heat;
heat=p;
for(int i=0;i<b;i++)
{
if(i==n)
{
q=(Lemon*)malloc(sizeof(Lemon));
q=p->Node;
p->Node=q->Node;
}
else
{
p=p->Node;
}
}
return heat;
}
链表的逆序输出:
链表的逆序输出:因为往往添加结点都是从末端开始添加,导致所输出的
元素往往会逆序,例如:1 2 3 4 5用头插法来输入的时候,会输出5 4
3 2 1的结果。如果要逆序输出可以:
1. 采用带有头指针的尾部插入法(上文有介绍,这里就不过多解释)
2. 采用递归的方式输出:代码在下文
void LemonPrintf(Lemon* root,int num1)
{
if(root==NULL)
{
return;
}
LemonPrintf(root->next,num1+1);
printf("%d ",root->num);
}
合并链表:
Lemon* LemonConnect(Lemon *p,Lemon *q)
{
Lemon *heat;
heat=p;
for(int i=0;i<5;i++)
{
p=p->Node;
}
p->Node=q->Node;
return heat;
}