对链表各种操作的实现(C语言)
来源:互联网 发布:python 字典转列表 编辑:程序博客网 时间:2024/05/18 01:46
对链表各种操作的实现(C语言)
#include <stdio.h>#include <malloc.h>#include <stdlib.h>typedef struct Node{ int data;//数据域 struct Node * pNext;//指针域 }NODE,*PNODE;//NODE等价于 struct Node//PNODE等价于NODEstruct Node* PNODE create_list();//初始化链表 void traverse_list(PNODE pHead);//遍历链表 bool is_empty(PNODE pHead);//判断链表是否为空int length_list(PNODE pHead);//获得链表长度 bool insert_list(PNODE,int,int);//在链表中插入一个数 bool delete_list(PNODE,int,int *); //在链表中删除一个数 void sort_list(PNODE);//对链表排序 int main(){int val=0;PNODE pHead=NULL;pHead=create_list();//创建一个非循环单链表,并将该链表的头结点的地址赋给pHead if(!is_empty(pHead)){printf("链表不为空!\n");}else{printf("链表为空!\n");}printf("链表的长度为:%d\n",length_list(pHead));traverse_list(pHead);sort_list(pHead);traverse_list(pHead);insert_list(pHead,3,22);traverse_list(pHead);if(delete_list(pHead,2,&val)){printf("删除成功!\n");printf("被删除的节点的数据是:%d\n",val);}else{printf("删除失败!\n");}traverse_list(pHead); return 0;} PNODE create_list(){int len;int i;int val;// 用来临时存放用户输入的结点的值 printf("请输入您要生成的链表节点的个数:len=");scanf("%d",&len); PNODE pHead=(PNODE)malloc(sizeof(NODE));if(NULL==pHead){printf("分配失败!\n");exit(-1); } PNODE pTail=pHead; pTail->pNext=NULL;for(i=0;i<len;i++){printf("请输入第%d个节点的值:",i+1); scanf("%d",&val); PNODE pNew=(PNODE)malloc(sizeof(NODE)); if(NULL==pNew) {printf("分配失败!\n");exit(-1); } pNew->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){PNODE p=pHead->pNext;if(NULL==p){return true;}else{return false;}}int length_list(PNODE pHead){int len=0;PNODE p=pHead->pNext;while(NULL!=p){len++;p=p->pNext;}return len;}//在pHead所指向链表的第pos个节点的前面插入一个新的节点,该节点的值是val,并且pos的值是从1开始 bool insert_list(PNODE pHead,int pos,int val){int i=0;PNODE p=pHead;while(NULL!=p&&i<pos-1){p=p->pNext;i++;}//跳出while循环时,i=pos-1,p指向pos-1这个节点 if(i>pos-1||NULL==p){return false;}PNODE pNew=(PNODE)malloc(sizeof(NODE));if(NULL==pNew){printf("动态分配内存失败!\n");exit(-1);}else{pNew->data=val;PNODE q=p->pNext;p->pNext=pNew;pNew->pNext=q;return true;}}bool delete_list(PNODE pHead,int pos,int *pVal){int i=0;PNODE p=pHead;while(NULL!=p->pNext&&i<pos-1){p=p->pNext;i++;} //跳出while循环时,i=pos-1//p指向pos-1 这个节点 //p->pNext第pos个节点,即待删除的节点 if(i>pos-1||NULL==p->pNext){return false;} PNODE q=p->pNext; *pVal=q->data; p->pNext=p->pNext->pNext; free(q); q=NULL;return true;}void sort_list(PNODE pHead){PNODE p=pHead->pNext;PNODE q;int t=0;for(;NULL!=p;p=p->pNext){ for(q=p->pNext;NULL!=q;q=q->pNext) { if(p->data > q->data) { t=p->data; p->data=q->data; q->data=t; }}}}
0 0
- 对链表各种操作的实现(C语言)
- 对栈的各种操作的实现(C语言)
- 对队列各种操作的实现(C语言)
- 单循环链表各种操作的C语言实现
- C语言实现单链表的各种操作
- 单链表各种操作的C语言实现(二)
- 单链表各种操作的C语言实现(一)
- C语言实现对文本文件的操作
- 对链表的基本实现和各种操作
- (C语言)自拟顺序表的各种操作
- C语言链表各种操作
- c语言链表各种操作
- 用C语言实现单链表的各种操作
- 链表的各种题目整理(C语言实现)
- 链表的各种题目整理(C语言实现)
- 二叉树的各种操作总汇(c/c++语言实现)
- 使用C语言对单向链表的操作
- 双向链表的操作实现(c语言)
- Android ,在争议中逃离 Linux 内核的 GPL 约束
- classpath和classpath*和配置文件路径的关系
- 并查集-水题
- hadoop-MapReduce
- Python基础入门(十)- 布尔类型条件判断与循环
- 对链表各种操作的实现(C语言)
- Web前端面试笔试题——null和undefined有什么区别么?
- 如何在Unity中对程序进行 Android 真机断点调试
- HDU 1757 A Simple Math Problem [矩阵快速幂]
- 最低通行费
- 十分钟学会Fiddler
- linux kernel 笔记(0)
- Linux中find命令的使用示例
- centOs 6.8 jdk,tomcat,安装与配置