博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C_数据结构_链表
阅读量:4330 次
发布时间:2019-06-06

本文共 3341 字,大约阅读时间需要 11 分钟。

# include 
# include
# include
//函数声明PNODE create_list(void); //创建链表void traverse_list(PNODE pHead); //输出链表bool is_empty(PNODE pHead); //判断链表是否为空int length_list(PNODE); //求连链表的长度bool insert_list(PNODE, int, int); //插入bool delete_list(PNODE, int, int *) //删除void sort_list(PNODE); //排序typedef struct Node{ int data; //数据域; struct Node * pNext; //指针域;}NODE, *PNODE; // NODE等价于struct Node, PNODE 等价于 struct Node *int main(void){ PNODE pHead = NULL; //等价于 struct Node * pHead = NULL; int val; pHead = create_list(); //create_list()功能:创建一个非循环单链表,并将该链表的头结点的地址付给pHead traverse_list(pHead); //insert_list(pHead, 4, 33); if ( delete_list(pHead, 4, &val) ) { printf("删除成功!删除的元素是:%d\n", val); } else { printf("删除失败!你删除的元素不存在!"); } traverse_list(pHead); //int len = length_list(pHead); //printf("链表的长度是:%d\n", len); //sort_list(pHead); //traverse_list(pHead);/* if ( is_empty(pHead) ) printf("链表为空!\n"); else printf("链表不空!");*/ return 0;}PNODE create_list(void) //创建链表{ int len; //用来存放有效节点的个数 int i; int val; //用来临时存放用户输入的节点值 //分配了一个不存放有效数据的头结点 PNODE pHead = (PNODE)malloc(sizeof(NODE)); if (NULL == pHead) { printf("分配失败!程序终止!\n"); exit(-1); } PNODE pTail = pHead; pTail->pNext = NULL; printf("请输入输入您需要生成的链表节点的个数:len = "); scanf("%d", &len); for (i=0; i
data = val; pTail->pNext = pNew; pNew->pNext = NULL; pTail = pNew; } return pHead;}void traverse_list(PNODE pHead) //输出链表{ PNODE p = pHead->pNext; while (NULL != p) { printf("%d ", p->data); p = p->pNext; } printf("\n"); return;}bool is_empty(PNODE pHead); //判断链表是否为空{ if (NULL == pHead->pNext) return true; else return false;}int length_list(PNODE); //求连链表的长度{ PNODE p = pHead->pNext; int len = 0; while (NULL != p) { ++len; p = p->pNext; } return len;}void sort_list(PNODE); //排序{ int i, j, t; int len = length_list(pHead); PNODE p, q; for (i=0,p=pHead->pNext; i
pNext) { for (j=i+1,q=p->pNext; j
pNext) { if (p->data > q->data) //类似数组中的:if (a[i] > a[j]) { t = p-data; p->data = q->data; q->data = t; } } } /* 数组的冒泡排序 for (i=0; i
a[j]) { t = a[i]; a[i] = a[j]; a[j] = t; } } }*/}//在pHead所指向链表的第pos个节点的前面插入一个新的节点,该节点的值是val,并且pos的值是从1开始bool insert_list(PNODE pHead, int pos, int val); //插入{ int i = 0; PNODE p = pHead; while (NULL!=p && i
pNext; ++i; } if (i>pos-1 || NULL==p) // i>pos-1 保证了 pos 大于等于1 return false; PNODE pNew = (PNODE)malloc(sizeof(NODE)); if (NULL == pNew) { printf("动态内存分配失败!\n"); exit(-1); } pNew->data = val; PNODE q = p->pNext; p->pNext = pNew; pNew->pNext = q; return true;}bool delete_list(PNODE, int pos, int * pval) //删除{ int i = 0; PNODE p = pHead; while (NULL!=p->pNext && i
pNext; ++i; } if (i>pos-1 || NULL==p->pNext) return false; PNODE q = p->pNext; *pVal = q->data; //删除p后面的节点 p->pNext = p->pNext->pNext; //p->pNext->pNext 等价于 q->pNext free(q); q = NULL; /* * pval = p->pNext->data; p->pNexp = p->pNext->pNext;*/ return true;}

 

转载于:https://www.cnblogs.com/LXL616/p/10661613.html

你可能感兴趣的文章
四、Linux/UNIX操作命令积累【chmod、chown、tail】
查看>>
盘点几种喜好“嘲讽”老罗的人
查看>>
Yii PHP Framework有用新手教程
查看>>
八皇后
查看>>
shell 命令总结
查看>>
【教程】EditPlus+MinGW搭建简易的C/C++开发环境
查看>>
数据库定时任务
查看>>
CodeForces - 828C String Reconstruction 并查集(next跳)
查看>>
如何利用UltraEdit语法着色来编辑shell脚本
查看>>
java.sql.SQLException: ORA-00911: invalid character 解决方法
查看>>
Alpha冲刺之事后诸葛亮
查看>>
晓晨高效IP提取工具 附源码
查看>>
Cannot load supported formats: Cannot run program "svn"
查看>>
NIO编程
查看>>
JQuery 模拟超链接触发
查看>>
【转】利用用Flash Builder 4.5搭建Android 开发平台(附带模拟器)
查看>>
php webservice服务端和客户端的实现
查看>>
Mplayer1.0rc2移植到am335x开发板
查看>>
Centos6.8 Mysql5.6 安装配置教程(转)
查看>>
Oracle(18)—— ORACLE中将查询结果的多列汇聚成一行(WMSYS.WM_CONCAT 函数的用法)...
查看>>