在之前链表的基础上改良的链表

在之前链表的基础上改良的链表,不用输入要创建的链表长度,直接插入节点就是

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 ;

转载于:https://my.oschina.net/u/553254/blog/72142

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值