单链表的各种基本运算
来源:互联网 发布:配眼镜的数据 编辑:程序博客网 时间:2024/05/20 05:06
输入代码:
/*实验题2-2*/#include<stdio.h>#include<stdlib.h>typedef char ElemType;typedef struct LNode{ ElemType data; struct LNode *next;} LinkList;//使用头插法void CreateListF(LinkList *&L,ElemType a[],int n){ LinkList *s; int i; L=(LinkList *)malloc(sizeof(LinkList)); L->next=NULL; for(i=0; i<n; i++) { s=(LinkList *)malloc(sizeof(LinkList)); s->data=a[i]; s->next=L->next; L->next=s; }}//使用尾插法void CreateListR(LinkList *&L,ElemType a[],int n){ LinkList *s,*r; int i; L=(LinkList *)malloc(sizeof(LinkList)); r=L; for(i=0; i<n; i++) { s=(LinkList *)malloc(sizeof(LinkList)); s->data=a[i]; r->next=s; r=s; } r->next=NULL;}//初始化线性表void InitList(LinkList *&L){ L=(LinkList *)malloc(sizeof(LinkList)); L->next=NULL;}//销毁线性表void DestroyList(LinkList *&L){ LinkList *pre=L,*p=L->next; while(p!=NULL) { free(pre); pre=p; p=pre->next; } free(pre);}//判断线性表是否为空表bool ListEmpty(LinkList *L){ return (L->next==NULL);}//求线性表的长度int ListLength(LinkList *L){ int n=0; LinkList *p=L; while(p->next!=NULL) { n++; p=p->next; } return (n);}//输出线性表void DispList(LinkList *L){ LinkList *p=L->next; while(p!=NULL) { printf("%c",p->data); p=p->next; } printf("\n");}//求线性表中某个数据元素值bool GetElem(LinkList *L,int i,ElemType &e){ int j=0; LinkList *p=L; while(j<i&&p!=NULL) { j++; p=p->next; } if(p==NULL) return false; else { e=p->data; return true; }}//按元素值查找int LocateElem(LinkList *L,ElemType e){ int i=1; LinkList *p=L->next; while(p!=NULL&&p->data!=e) { p=p->next; i++; } if(p==NULL) return (0); else return(i);}//插入数据元素bool ListInsert(LinkList *&L,int i,ElemType e){ int j=0; LinkList *p=L,*s; while(j<i-1&&p!=NULL) { j++; p=p->next; } if(p==NULL) return false; else { s=(LinkList *)malloc(sizeof(LinkList)); s->data=e; s->next=p->next; p->next=s; return true; }}//删除数据元素bool ListDelete(LinkList *&L,int i,ElemType &e){ int j=0; LinkList *p=L,*q; while(j<i-1&&p!=NULL) { j++; p=p->next; } if(p==NULL) return false; else { q=p->next; if(q==NULL) return false; e=q->data; p->next=q->next; free(q); return true; }}int main(){ LinkList *L; char s[5]= {'a','b','c','d','e'}; char e; int i,j; InitList(L);//初始化单链表 CreateListR(L,s,5);//使用尾插法建立单链表 DispList(L);//输出单链表 ListLength(L);//求单链表的长度 i=ListEmpty(L); if(i==0) { printf("该单链表不为空\n"); } else { printf("该单链表为空\n"); } e=GetElem(L,3,e); printf("第三个元素为:%c\n",e); j=LocateElem(L,'a');//输出a的位置 printf("元素a为第%d个元素\n",j); ListInsert(L,4,'f');//插入元素f到第四个元素 DispList(L);//输出线性表L ListDelete(L,3,e);//删除第三个元素 DispList(L);//输出单链表L DestroyList(L);//销毁释放单链表}
运行结果:
0 0
- 单链表各种基本的运算
- 单链表的各种基本运算
- 单链表的各种基本运算
- 实验一:单链表的各种基本运算
- 实现单链表各种基本运算的算法
- 单链表各种基本运算的算法
- 双链表的各种基本运算
- C语言 循环单链表各种基本运算的算法
- 实现循环单链表各种基本运算的算法
- 编写一个程序,实现单链表的各种基本运算
- 顺序表的各种基本运算
- 链队列的各种基本运算
- 顺序环形队列的各种基本运算
- 数据结构 顺序串的各种基本运算
- 顺序表各种基本运算的算法
- 顺序栈各种基本运算的算法
- 环形队列各种基本运算的算法
- 顺序串各种基本运算的算法
- 博客迁移
- 笔记-二叉查找树
- 贪心算法2之1006
- codeforces 452 C. Magic Trick
- Mesh Compression 学习 -- OpenCtm 创建mesh文件
- 单链表的各种基本运算
- 给我一个不坚强的理由
- H3C S5800/S7506E实现IRF功能详细配置过程
- 解决倦怠的方法
- 如何调优JVM - 优化Java虚拟机(大全+实例)
- Android Screen Monitor抓取真机屏幕
- Android 自定义Camera(二)
- 欢迎使用CSDN-markdown编辑器
- 迷之八皇后问题(回溯法)