数据结构 ——单链表操作的算法
来源:互联网 发布:淘宝客优惠券推广 编辑:程序博客网 时间:2024/06/06 04:01
单链表操作的算法:#include<stdio.h>#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); //创建链表函数声明void traverse_list(PNODE pHead); //遍历链表函数声明bool is_empty(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 *pVal); //删除函数声明int main(void){PNODE pHead=NULL; //等价于struct Node*pHead=NULLint val;pHead=create_list(); //创建链表printf("原始链表是:");traverse_list(pHead);if(is_empty(pHead))printf("链表为空!\n");elseprintf("链表不为空!\n");int len=length_list(pHead);printf("链表的长度是%d\n",len);sort_list(pHead);printf("链表排序后顺序:\n");traverse_list(pHead);insert_list(pHead,2,54);printf("在链表第二个位置插入54后是:\n");traverse_list(pHead);if(delete_list(pHead,3,&val))printf("删除第三个元素成功是:%d\n",val);elseprintf("删除失败!\n");return 0;}PNODE create_list(void) //不需要参数{int len; //用来存储有效节点的个数int val; //临时存放数据节点的值PNODE pHead=(PNODE)malloc(sizeof(NODE)); //动态申请,返回NODE结点本身if(NULL==pHead){printf("分配失败,终止程序!\n");exit(-1);}PNODE pTail=pHead;pTail->pNext=NULL; //指针域清空printf("您输入的单链表的节点个数是:len=");scanf("%d",&len);for(int 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; //p先指向第一个节点while(NULL!=p){printf("%d ",p->data);p=p->pNext;}printf("\n");return ;}bool is_empty(PNODE pHead){if(NULL==pHead->pNext)return true;elsereturn false;}int length_list(PNODE pHead){PNODE p=pHead->pNext;int len=0;while(NULL!=p){++len;p=p->pNext;}return len;}void sort_list(PNODE pHead){int i,j,t;int len=length_list(pHead);PNODE p,q;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){t=p->data;p->data=q->data;q->data=t;}}}return ;}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;}if(NULL==p || i>pos-1)return false;PNODE pNew=(PNODE)malloc(sizeof(NODE));if(NULL==pNew){printf("内存分配失败,程序终止!\n");exit(-1);}pNew->data=val;pNew->pNext=p->pNext; //也可以是:PNODE q=p->Next; p->pNext=pNew; pNew->pNext=q;p->pNext=pNew; 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;}if(NULL==p->pNext || i>pos-1)return false;PNODE q=p->pNext;*pVal=q->data;p->pNext=p->pNext->pNext; //删除p节点后面的结点free(q);q=NULL;return true;}
0 0
- 数据结构 ——单链表操作的算法
- 数据结构 ——队列操作的算法
- 数据结构与算法——单链表的基本操作
- 数据结构算法——单链表及其操作
- 数据结构—单链表的操作
- 数据结构与算法——栈的相关操作
- 数据结构 ——进出栈操作的算法
- 数据结构 ——静态二叉树操作的算法
- 数据结构 — 二叉树的基本操作实现(递归算法)
- 数据结构——单链表(链表操作算法集合)
- 数据结构——单链表的基本操作
- 数据结构——单链表的基本操作
- 数据结构——单链表的初操作
- 数据结构——单链表的基本操作
- 数据结构——单链表的操作
- 数据结构算法——单链表的应用
- 数据结构—双链表的操作
- 数据结构实验一--单链表的基本操作的算法
- Android访问网络,使用HttpURLConnection还是HttpClient?
- 黑马程序员——面向对象——多态-抽象类-接口
- 5.13viewPager&&viewFlipper
- 有关fstream::read()读取错误问题
- android的菜单错误:add cannot be resolved or is not a field
- 数据结构 ——单链表操作的算法
- 黑马程序员————面向对象
- [LeetCode] Longest Valid Parentheses
- POJ3067 Japan【树状数组】【逆序数】
- Java基础——集合框架工具类(Collections类和Arrays类)
- [Java IO]整理
- 为什么不会编程
- Remove Duplicates from Sorted Array II
- shell脚本里切换用户执行命令的注意事项