在之前链表的基础上改良的链表,不用输入要创建的链表长度,直接插入节点就是
code:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *pnext;
}Node,*Pnode;
Pnode creat_list();//链表创建函数
void traverse_list(Pnode phead);//遍历链表函数
bool insert_list(Pnode phead ,int weizhi,int shu);//链表加节点函数
bool delete_list(Pnode phead,int weizhi);//链表删除节点函数
bool is_empty(Pnode phead);//判断链表是否为空函数
bool is_full(Pnode phead);//判断链表是否满函数,我这样创建链表就不存在空链表,所以这个函数不要
void sort_list(Pnode phead);//链表排序函数
int lenght_list(Pnode phead);//求链表长度函数
int main()
{
int len;
Pnode phead;
phead=creat_list();
traverse_list(phead);
insert_list(phead,1,55);
insert_list(phead,2,525);
insert_list(phead,1,535);
traverse_list(phead);
sort_list(phead);
traverse_list(phead);
delete_list(phead,3);
traverse_list(phead);
len=lenght_list(phead);
printf("链表的长度为:%d\n",len);
return 0;
}
Pnode creat_list()
{
Pnode phead=(Pnode)malloc(sizeof(Node));
if(phead==NULL)
{
printf("创建链表失败");
exit(1);
}
phead->pnext=NULL;
return phead;
}
bool insert_list(Pnode phead,int weizhi,int shu)
{ int i=0;
Pnode ptail=phead;
while(ptail!=NULL && i<weizhi-1)
{
ptail=ptail->pnext;
i++;
}
if(i>weizhi-1||NULL==ptail)
return false;
else
{
Pnode tail=ptail->pnext;
Pnode qtail=(Pnode)malloc(sizeof(Node));
if(NULL==qtail)
{
printf("内存分配失败!\n");
exit(1);
}
qtail->data=shu;
ptail->pnext=qtail;
qtail->pnext=tail;
return true;
}
}
bool delete_list(Pnode phead,int weizhi)
{
int i=0;
Pnode ptail=phead;
while(ptail->pnext!=NULL && i<weizhi-1)
{
ptail=ptail->pnext;
i++;
}
if(i>weizhi-1||NULL==ptail)
return false;
else
{
Pnode tail=ptail->pnext;
ptail->pnext=tail->pnext;//注意这里,刚出错了
free(tail);
tail=NULL;
// ptail=ptail->pnext;
return true;
}
}
void traverse_list(Pnode phead)
{
Pnode ptail=phead->pnext;//ptail指向首节点
while(ptail!=NULL)
{
printf("%d ",ptail->data);
ptail=ptail->pnext;
}
printf("\n");
}
bool is_empty(Pnode phead)
{
if(phead->pnext==NULL)
return true;
else
return false;
}
int lenght_list(Pnode phead)
{
int len=0;
Pnode tail=phead->pnext;
while(tail!=NULL)
{
len++;
tail=tail->pnext;
}
return len;
}
void sort_list(Pnode phead)
{Pnode p,q;
int i,j;
int len=lenght_list(phead);
if(is_empty(phead))
{
printf("空链表不需排序!\n");
}
else
for(i=0,p=phead->pnext;i<len-1;i++,p=p->pnext)
{
for(j=i+1,q=p->pnext;j<len;j++,q=q->pnext)
{
if(p->data>q->data)
{
int temp=p->data;
p->data=q->data;
q->data=temp;
}
}
}
return ;
}