单链表的19个功能编写(求指导)
来源:互联网 发布:淘宝指数 编辑:程序博客网 时间:2024/06/06 06:04
前几天在学习单链表,然后在博客上看到前人编写了19个功能
他的博客地址:http://www.cnblogs.com/lifuqing/archive/2011/08/20/List.html
然后自己也想编写一个,编了几天写出十几个,今晚调试了下,都能正常运行,不过不知道有没有bug,所以发这共同学习下,小弟在此先谢过了
头文件:
#ifndef _LINK_LIST_H_#define _LINK_LIST_H_#include <stdio.h>#include <stdlib.h>#define OK 1#define ERROR 0typedef int ElemType; //Êý¾ÝÀàÐÍtypedef struct LinkList{ ElemType date; struct LinkList *pNext;}LinkList;int Init_LinkList(LinkList **L);LinkList* Create_LinkList();void Print_LinkList(LinkList *L);int Clear_LinkList(LinkList *L);int Length_LinkList(LinkList *L);int Empty_LinkList(LinkList *L);int GetElem_LinkList(LinkList *L,int i,ElemType *e);ElemType *EetElemAddr(LinkList *L, ElemType x);int modifyElem(LinkList *L,int i,ElemType x);int InsertHead_LinkList(LinkList **L,ElemType x);int InsertEnd_LinkList(LinkList *L,ElemType x);int Insert_LinkList(LinkList *L,int i,ElemType x);#endif // _LINK_LIST_H_</strong></span><span style="color:#33ff33;"></span>
<strong><span style="font-size:24px;">C文件:</span></strong>
<strong><span style="font-size:24px;"></span></strong><pre name="code" class="cpp">/************************************************************************//** 以下是关于线性表链接存储(单链表)操作的18种算法 *//** 1.初始化线性表,即置单链表的表头指针为空 *//** 2.创建线性表,此函数输入负数终止读取数据*//** 3.打印链表,链表的遍历*//** 4.清除线性表L中的所有元素,即释放单链表L中所有的结点,使之成为一个空表 *//** 5.返回单链表的长度 *//** 6.检查单链表是否为空,若为空则返回1,否则返回0 *//** 7.返回单链表中第pos个结点中的元素,若pos超出范围,则停止程序运行 *e返回它的值*//** 8.从单链表中查找具有给定值x的第一个元素,若查找成功则返回该结点data域的存储地址,否则返回NULL *//** 9.把单链表中第pos个结点的值修改为x的值,若修改成功返回1,否则返回0 *//** 10.向单链表的表头插入一个元素 *//** 11.向单链表的末尾添加一个元素 *//** 12.向单链表中第pos个结点位置插入元素为x的结点,若插入成功返回1,否则返回0 *//** 13.向有序单链表中插入元素x结点,使得插入后仍然有序 *//** 14.从单链表中删除表头结点,并把该结点的值返回,若删除失败则停止程序运行 *//** 15.从单链表中删除表尾结点并返回它的值,若删除失败则停止程序运行 *//** 16.从单链表中删除第pos个结点并返回它的值,若删除失败则停止程序运行 *//** 17.从单链表中删除值为x的第一个结点,若删除成功则返回1,否则返回0 *//** 18.交换2个元素的位置 *//** 19.将线性表进行快速排序 *//************************************************************************/#include "linklist.h"/** 1.初始化线性表,即置单链表的表头指针为空 */int Init_LinkList(LinkList **L){ *L=NULL; return OK;}/** 2.创建线性表,此函数输入负数终止读取数据 n表示长度*/LinkList* Create_LinkList(){ //先建立一个头结点 int i,n; LinkList *p,*q,*L; L=(LinkList*)malloc(sizeof(LinkList)); q=L; if(L==NULL)exit(0); L->pNext = NULL; //申请一个头结点 printf("Please input the length of linked list:\n"); scanf("%d",&n); for(i=0;i<n;i++) { p=(LinkList *)malloc(sizeof(LinkList));//申请一个新节点 if(p==NULL)exit(0); printf("please input the data%d:\n",i+1); scanf("%d",&p->date); p->pNext=q->pNext; q->pNext=p; q=p; } return L;}/** 3.打印链表,链表的遍历*/void Print_LinkList(LinkList *L){ LinkList *p; p=L; if(p->pNext==NULL) { printf("The linked list is NULL!!"); exit(0); } else { while(p->pNext!=NULL) { p=p->pNext; printf("%5d",p->date); } printf("\n"); }}/** 4.清除线性表L中的所有元素,即释放单链表L中所有的结点,使之成为一个空表 */int Clear_LinkList(LinkList *L){ LinkList *p; if(L->pNext==NULL) { printf("The linked list is NULL!!"); exit(0); } while(L->pNext!=NULL) { p=L->pNext; free(L); L=p; } return OK;}/** 5.返回单链表的长度 */int Length_LinkList(LinkList *L){ int i=0; LinkList *p; p=L; while(p->pNext!=NULL) { i++; p=p->pNext; } return i;}/** 6.检查单链表是否为空,若为空则返回1,否则返回0 */int Empty_LinkList(LinkList *L){ if(L->pNext==NULL) return OK; else return 0;}/** 7.返回单链表中第pos个结点中的元素,若pos超出范围,则停止程序运行 ,*e返回它的值*/int GetElem_LinkList(LinkList *L,int i,ElemType *e){ LinkList *p; int n=0; p=L; if(!p || n>i ) return ERROR; while(((p->pNext)!=NULL) && (n<i)) { p=p->pNext; n++; } *e=p->date; return OK;}/** 8.从单链表中查找data数据域为x的第一个元素,若查找成功则返回该结点data域的存储地址,否则返回NULL */ElemType *EetElemAddr(LinkList *L, ElemType x){ LinkList *p; p=L; if(p->pNext==NULL)exit(0); while(p->date!=x) { p=p->pNext; } if(p->date!=x) { printf("NO number x !!!"); return NULL; } return &(p->date);}/** 9.把单链表中第pos个结点的值修改为x的值,若修改成功返回1,否则返回0 */int modifyElem(LinkList *L,int i,ElemType x){ LinkList *p; int j=1; p=L; if(p->pNext==NULL) { printf("The linked list is NULL"); return ERROR; } if(i<1)exit(0); while(p->pNext!=NULL ) { p=p->pNext; if(j==i) break; j++; } p->date=x; return OK;}/** 10.向单链表的表头插入一个元素 */int InsertHead_LinkList(LinkList **L,ElemType x){ LinkList *p; p=(LinkList*)malloc(sizeof(LinkList)); if((*L)==NULL)exit(0); p->date=x; p->pNext=(*L)->pNext; (*L)->pNext=p; return OK;}/** 11.向单链表的末尾添加一个元素 */int InsertEnd_LinkList(LinkList *L,ElemType x){ LinkList *p,*q; p=L; while(p->pNext!=NULL) { p=p->pNext; } q=(LinkList*)malloc(sizeof(LinkList)); q->date=x; p->pNext=q; q->pNext=NULL; return OK;}/** 12.向单链表中第pos个结点位置插入元素为x的结点,若插入成功返回1,否则返回0 */int Insert_LinkList(LinkList *L,int i,ElemType x){ LinkList *p,*q; int j=1; p=L; if(i<1)return ERROR; while(p->pNext) { if(j==i)break; p=p->pNext; j++; } q=(LinkList*)malloc(sizeof(LinkList)); q->date=x; q->pNext=p->pNext; p->pNext=q; return OK;}/** 13.向有序单链表中插入元素x结点,使得插入后仍然有序 *//** 14.从单链表中删除表头结点,并把该结点的值返回,若删除失败则停止程序运行 */
</pre><pre name="code" class="cpp">持续更新中。。。。
0 0
- 单链表的19个功能编写(求指导)
- 第五周实验指导--任务三--编写基于对象的程序,求5个长方柱的体积和表面积
- 编写函数,其功能是求3个整数的最大值和最小值
- MakeFile的编写指导
- MakeFile的编写指导
- Makefile的编写指导
- 参考了网上代码之后自己编写整数和真分数的四则运算,求指导(虽然我知道没人看。。。)
- 代码编写的一般性指导
- Makefile的编写指导(一)
- Makefile的编写指导(一)
- 编写hashCode()的基本指导
- 类的思想(自己接着整理,求指导)
- 光标函数(自己整理的,求指导)
- 最近闲来无事做了个php网站源码下载的网站 求指导。。。
- 9.编写长方形类Rect:具有求长方形面积功能;编写类Tube:具有求长方体体积功能(利用Rect属性),在主类Test中用之求长方体的体积。
- Java代码编写的一般性指导
- RCP: Eclipse Forms的编写指导
- Java代码编写的一般性指导
- heap&stack 区别
- HDU 1024 Max Sum Plus Plus
- linux awk命令详解
- struts2配置
- 谈VC++对象模型(类内存占用)
- 单链表的19个功能编写(求指导)
- Java编写线程死锁
- linux统计出现次数top3的url
- hdu1789Doing Homework again(贪心)
- 单例模式
- 求一个整数转换为二进制数后有几个1
- android布局属性
- 实时操作系统任务调度
- 士兵队列训练问题