c语言链表排序新增头指针法,C语言链表总结(创建,排序,增加,删除)

这篇博客详细介绍了C语言中单链表的创建、遍历、长度计算、排序以及在指定位置插入和删除结点的实现方法。通过示例代码展示了如何动态分配内存,创建链表,并提供了链表操作的实用函数。同时,还包含了对链表的冒泡排序算法。这些功能对于理解和掌握C语言中的链表数据结构非常有帮助。
摘要由CSDN通过智能技术生成

#include

#include

typedef struct NODE

{

int data ;

struct NODE * pNext ;

} * PNODE , NODE ;

PNODE create_list(void) ;

void traverse_list(PNODE phead);

int length_list(PNODE pHead) ;

void sort_list(PNODE pHead);

bool insert_list(PNODE phead,int Pos,int val);

bool delete_list(PNODE phead,int Pos,int * val);

int main()

{

PNODE pHead = NULL ;

pHead =create_list();

traverse_list(pHead);

printf("链表的长度是:%d\n",length_list(pHead) );

//sort_list(pHead);

//traverse_list(pHead);

int add ;

add=12 ;

if(insert_list(pHead,5,add) )//在第Pos个结点前面插入一个新的结点

{

printf("您增加的结点成功,值为%d\n",add) ;

traverse_list(pHead);

}

else printf("结点为空!\n") ;

int val ;

if(delete_list(pHead,5,&val) )

{

printf("您删除的结点成功,值为%d\n",val);

traverse_list(pHead);

}

else printf("删除的结点为空!\n") ;

}

PNODE create_list(void)

{

int val;

int len;

int i ;

printf("请输入您需要的结点个数:");

scanf("%d",&len);

PNODE phead = (PNODE)malloc(sizeof(NODE)) ;

if(phead ==NULL)

{

printf("动态分配内存失败!");

exit(-1);

}

PNODE pTail =phead ;

pTail->pNext = NULL ;

for(i=0;i

{

PNODE pNew = (PNODE)malloc(sizeof(NODE)) ;

if(pNew ==NULL)

{

printf("动态分配内存失败!");

exit(-1);

}

printf("请输入第%d个结点的值:",i+1);

scanf("%d",&val);

pNew->data = val ;

pTail->pNext=pNew ;

pNew->pNext=NULL ;

pTail = pNew ;

}

return phead ;

}

void traverse_list(PNODE phead)

{

PNODE p = phead->pNext ;

while(p!=NULL)

{

printf("%d ",p->data);

p=p->pNext ;

}

printf("\n");

}

int length_list(PNODE phead)

{

int len = 0 ;

PNODE p = phead->pNext ;

while(p!=NULL)

{

len++ ;

p=p->pNext ;

}

return len ;

}

void sort_list(PNODE phead)

{

int i,j,temp,len;

len = length_list(phead);

PNODE p = NULL ;

for(i=0;i

{

for(j=0,p=phead->pNext;jpNext)

{

if(p->data>p->pNext->data)

{

temp = p->data;

p->data=p->pNext->data;

p->pNext->data = temp ;

}

}

}

}

bool insert_list(PNODE phead,int Pos,int val) //是在第Pos个结点前面插入一个新的结点

{

int i=0;

PNODE p=phead;

while(p!=NULL && i

{

p=p->pNext;

i++ ;

}

if(p==NULL && i>Pos-1)

return false ;

PNODE pNew=(PNODE)malloc(sizeof(NODE));

if(pNew ==NULL)

{

printf("动态分配失败!");

exit(-1);

}

pNew->data = val ;

PNODE q = p->pNext ;

p->pNext = pNew ;

pNew->pNext =q ;

return true ;

}

bool delete_list(PNODE phead,int Pos,int *val)

{

int i=0;

PNODE p =phead ;

while(p->pNext!=NULL && i

{

p=p->pNext ;

i++;

}

if(p->pNext == NULL && i>Pos-1)

return false ;

PNODE q = p->pNext ;

*val = q->data ;

p->pNext =p->pNext->pNext ;

free(q);

q=NULL ;

}

C语言 链表的创建--打印--逆置--新增--删除--排序--释放

#define _CRT_SECURE_NO_WARNINGS #include #include #include

C语言链表操作模板(添加,删除,遍历,排序)

C语言链表操作模板,摘自郝斌的C语言视频教程,简单的修改成了纯C格式.当年照着视频学习的时候记录下来的,在使用的时候直接拿来修改修改修改能节约不少时间的. /********************* ...

链表基本操作与排序(c语言)

本设计程序用C编写,完成单链表的生成,任意位置的插入.删除,以及确定某一元素在单链表中的位置.实现三种排序算法-冒泡排序.快速排序.合并排序.产生四个长度为100,1000,10000,50000的随 ...

转: KindEditor 图片空间文件增加删除文件、文件夹功能(ASP语言环境)

KindEditor 图片上传功能中集成的图片空间文件管理插件可以对已上传图片进行管理,十分便捷,只是没有图片删除功能,仔细研读xieliang分享的经验后,自己动手改造了一下,顺便分享给有同样需求的 ...

C语言习题 链表建立,插入,删除,输出

Problem B: C语言习题 链表建立,插入,删除,输出 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 222  Solved: 92 [Subm ...

C 单向链表的创建、插入及删除

链表是一种常见的基础数据结构,结构体指针在这里得到了充分的利用.链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定义多种数据类型,还可以根据需要随意增添,删除,插入节 ...

YTU 2430: C语言习题 链表建立,插入,删除,输出

2430: C语言习题 链表建立,插入,删除,输出 时间限制: 1 Sec  内存限制: 128 MB 提交: 576  解决: 280 题目描述 编写一个函数creatlink,用来建立一个动态链表 ...

C语言链表中数组实现数据选择排序,升序、降序功能主要难点

链表排序讲解: head指针指向链表的头结点,是找到整个链表的唯一依据,如果head指针丢失,整个链表就找不到了. head存储的是第一个节点的地址,head->next存储的是第二个节点的地址 ...

[数据结构】【c语言】链表的创建和遍历

第一次写代码的博客,一个刚刚接触的新手,来这里主要是为了记录自己,方便自己以后浏览,也欢迎大家指正.先来个简单的,动态链表的创建和遍历. #include #includ ...

随机推荐

xv6的作业翻译——作业1 - shell和系统调用

Xv6的lecture LEC 1 Operating systems   L1: O/S overview L1:O/S概述   * 6.828 goals 6.828的目标   Understan ...

DevExpress 程序运行后 layoutView 卡片大小发生变化

设置属性前效果:  将layoutView1.CardMinSize 的属性更改为(0, 0) 后 效果:

BZOJ 1086: [SCOI2005]王室联邦

1086: [SCOI2005]王室联邦 Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 1399  Solved: ...

近期C#项目中总结

1. 读写文件操作 using (file = new System.IO.StreamReader(inputfile)) { using (outfile = new System.IO.Stre ...

a + b + c 求和

#include int main() { std::cout << "请输入三个数字,以空格分隔,按回车键结束:" << ...

获取网络图片的大小 改变 图片色值 灰度什么的方法集合-b

直接上代码了 头文件 // 图片处理 0 半灰色  1 灰度   2 深棕色    3 反色 +(UIImage*)imageWithImage:(UIImage*)image grayLevelTy ...

RDIFramework&period;NET V3&period;3 WinForm版新增日程管理功能模块

功能描述 日程管理基于月.周.日的日历视图,把安排到每一天的具体时间点,让每一天的时间都充分利用:甚至您也可以把个人非工作事项也安排进来,完全是属于自己的全时间管理.就是将每天的工作和事务安排在日期中 ...

C&plus;&plus; Primer 笔记——标准库类型string

1.如果使用等号初始化一个变量,实际上执行的是拷贝初始化,编译器吧等号右侧的初始值拷贝到新创建的对象中去:如果不使用等号则执行的是直接初始化. std::string str = "Test ...

百度前端代码规范:HTML

HTML 1.代码风格 1.1缩进与换行 [强制] 使用 4 个空格做为一个缩进层级,不允许使用 2 个空格 或 tab 字符.

npm包的更新说明,你还敢不看吗

npm包的更新说明,你还敢不看吗 前言 平时工作少不了依赖一些第三方的npm包,站在各位大牛的肩膀上来更好的写bug,此外还可以学习各位大佬们的各种设计思路和优雅实现.不过npm包虽好,但使用之前也要 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值