该资源是一个C语言实现的单链表操作程序,包括链表的创建(头插法与尾插法)、遍历、判断空表、插入节点、删除节点、计算链表长度以及使用选择排序算法对链表进行排序。 在C语言中,链表是一种非常重要的数据结构,它通过节点之间的指针连接来存储数据。这个程序定义了一个名为`NODE`的结构体,包含一个整型数据成员`data`和一个指向下一个节点的指针`pNext`。`typedef`关键字被用来创建两个别名:`NODE`代表`struct Node`,`PNODE`代表指向`struct Node`的指针。 `create_list()`函数用于创建链表,可以使用两种方法:头插法和尾插法。头插法是在链表头部添加新节点,而尾插法则是在链表末尾添加新节点。`traverse_list()`函数用于遍历链表并打印所有节点的值。 `is_empty()`函数用于检查链表是否为空,如果链表头指针`pHead`为`NULL`,则表示链表为空。 `insert_list()`函数允许在链表的特定位置插入一个新节点,`pos`参数表示插入位置,`val`参数是插入的值。注意,这里的`pos`从1开始计数,表示第一个元素的位置是1。 `create_list_head()`函数创建一个只有一个节点的链表,即头节点。 `delete_list()`函数用于删除链表中的指定位置的节点,`pos`参数表示要删除的节点位置,`pVal`参数是一个指向整型变量的指针,用于返回被删除节点的值。删除操作完成后,链表的长度会减一。 `length_list()`函数计算链表的长度,通过遍历链表并计数实现。 `sort_list()`函数实现了选择排序算法,对链表中的数据进行升序排列。选择排序是一种简单直观的排序算法,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 在`main()`函数中,展示了如何使用这些功能。首先创建一个链表,然后遍历并打印链表长度。接着插入一个新节点,再次打印长度。之后删除第4个元素,并打印删除后的链表长度。最后,对链表进行排序并再次遍历。 这个程序提供了一个完整的链表操作示例,涵盖了链表的基本操作,对于学习C语言和数据结构的初学者来说非常有帮助。
#include<malloc.h>
#include<stdlib.h>
typedef struct Node
{
int data;//数据域
struct Node * pNext;//指针域
}NODE,*PNODE;//NODE等价于struct Node,PNODE 等价于struct Node *
PNODE create_list();//创建单链表并且返回该链表的头指针
void traverse_list(PNODE pHead);//遍历单链表
int is_empty(PNODE pHead);//判断表是否为空
int insert_list(PNODE pHead,int pos,int val);
//在pHead所指向的链表的第pos个节点的前面插入一个新节点,值(数据域)为val,并且pos从1开始
PNODE create_list_head();//头插法
int delete_list(PNODE pHead,int pos,int *pVal);
//删除链表的第pos个节点,并将删除的节点的值存到pVal所指的变量中,pos值从1开始
int length_list(PNODE pHead);//求表长度
void sort_list(PNODE pHead);//排序
int main(void)
{ int val=0;//保存被删节点的数据值
PNODE pHead=NULL;//等价于struct Node * pHead=NULL,定义头指针
//创建单链表 尾插法
pHead=create_list();
//用头插法创建单链表
//pHead=create_list_head();
traverse_list(pHead);
printf("表长度为%d:\n",length_list(pHead));
//插入元素
insert_list(pHead,3,100);
printf("表长度为%d\n",length_list(pHead));
//遍历单链表
traverse_list(pHead);
printf("删除第4个元素:\n");
delete_list(pHead,4,&val);
//遍历单链表
printf("表长度为%d:\n",length_list(pHead));
sort_list(pHead);//排序
traverse_list(pHead);
printf("被删元素的值为:%d\n",val);
}
PNODE create_list() //尾插法,顺序序列
{
int len;//用来存放有效节点的个数
int i;
int val;
PNODE pNew;//先定义
PNODE pHead=(PNODE)malloc(sizeof(NODE));//向系统申请空间,表示头节点
PNODE pTail=pHead;//尾指针,开始指向头节点
pTail->pNext=NULL;
if(pHead==NULL)
{
printf("空间分配失败,程序终止!\n");
剩余7页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++多态实现机制详解:虚函数与早期绑定
- Java多线程与异常处理详解
- 校园导游系统:无向图实现最短路径探索
- SQL2005彻底删除指南:避免重装失败
- GTD时间管理法:提升效率与组织生活的关键
- Python进制转换全攻略:从10进制到16进制
- 商丘物流业区位优势探究:发展战略与机遇
- C语言实训:简单计算器程序设计
- Oracle SQL命令大全:用户管理、权限操作与查询
- Struts2配置详解与示例
- C#编程规范与最佳实践
- C语言面试常见问题解析
- 超声波测距技术详解:电路与程序设计
- 反激开关电源设计:UC3844与TL431优化稳压
- Cisco路由器配置全攻略
- SQLServer 2005 CTE递归教程:创建员工层级结构