2022年数据结构线性表单链表的查找、插入、删除知识 .pdf
《2022年数据结构线性表单链表的查找、插入、删除知识 .pdf》由会员分享,可在线阅读,更多相关《2022年数据结构线性表单链表的查找、插入、删除知识 .pdf(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验报告课程名称数据结构姓名学号专业班级指导教师名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 29 页 - - - - - - - - - 目录第二章线性表的查找、插入、删除. 11.1 顺序表的查找 . 1 1.2 顺序表的插入 . 2 1.3 顺序表的删除 . 4单链表的建立、插入、删除. . 62.1 单链表的建立(尾插法) . 6 2.2 单链表的插入 . 8 2.3 单链表的删除 . 10第三章栈. 143.1 链栈 . 14 3.2 顺序栈 . 163.3
2、队列 . . 183.4 杨辉三角. 20第四章串 .234.1 字符串的建立 .23 4.2 顺序串的插入 .25名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 29 页 - - - - - - - - - 1 1.线性表的查找、插入、删除1.1 顺序表的查找程序:#include #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define ElemType
3、int #define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/ typedef struct ElemType elemMAXSIZE; /*线性表占用的数组空间 */ int last; /*记录线性表中最后一个元素在数组elem 中的位置(下标值),空表为 -1*/ Seqlist; int Locate(Seqlist L,ElemType e) /* 在顺序表 L 中查找与 e 相等的元素,若 L。elemi=e,则找到该元素,并返回i+1 ,若找不到,则返回 -1*/ int i=0; /*i为扫描计数器,初值为0,即从第一个元素开始比较*/ w
4、hile (i=L.last)&(L.elemi!=e) /* 顺序扫描表,直到找到值为e 的元素,或扫描到表尾仍没找到*/ i+; if(i=L.last) return (i+1); /*若找到值为 e 的元素,则返回其序号 */ else return(-1); /*若没找到,则返回空序号 */ void main() Seqlist l; int p,q,r; int i; printf(请输入线性标的长度 :); scanf(%d,&r); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - -
5、- - - 第 3 页,共 29 页 - - - - - - - - - 2 l.last=r-1; printf(请输入线性表的各元素值:n); for (i=0;i=l.last;i+) scanf(%d,&l.elemi); printf(请输入要查找的元素值 :n); scanf(%d,&q); p=Locate(l,q); if(p=-1) printf(在此线性表中没有该元素 !n); else printf(该素在线性表中的位置为:%dn,p); 执行结果:错误分析:在编写过程中,在编写主函数的时候有落下未编写的,导致运行过程中不识别。1.2 顺序表的插入程序:#include
6、#include /#include #define OK 1 #define ERROR 0 #define TRUE 1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 29 页 - - - - - - - - - 3 #define FALSE 0 #define ElemType int #define MAXSIZE 100 typedef struct ElemType elemMAXSIZE; int last; SeqList; /#include com
7、mon.h /#include seqlist.h int InsList(SeqList *L,int i,ElemType e) int k; if(iL-last+2) printf(插入位置 i 值不合法 ); return(ERROR); if(L-last= MAXSIZE-1) printf(表已满无法插入 ); return(ERROR); for(k=L-last;k=i-1;k-) L-elemk+1=L-elemk; L-elemi-1=e; L-last+; return(OK); void main() SeqList *l; int p,q,r; int i; l=
8、(SeqList*)malloc(sizeof(SeqList); printf(请输入线性表的长度 :); scanf(%d,&r); l-last = r-1; printf(请输入线性表的各元素值 :n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 29 页 - - - - - - - - - 4 for(i=0; ilast; i+) scanf(%d,&l-elemi); printf(请输入要插入的位置 :n); scanf(%d,&p); printf
9、(请输入要插入的元素值 :n); scanf(%d,&q); InsList(l,p,q); for(i=0; ilast; i+) printf(%d ,l-elemi); 执行结果:1.3 顺序表的删除程序:#include #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define ElemType int #define MAXSIZE 100 typedef struct 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - -
10、- - - 名师精心整理 - - - - - - - 第 6 页,共 29 页 - - - - - - - - - 5 ElemType elemMAXSIZE; int last; SeqList; int DelList(SeqList *L,int i,ElemType *e) int k; if(iL-last+1) printf(删除位置不合法 !); return(ERROR); *e = L-elemi-1; for(k=i; ilast; k+) L-elemk-1 = L-elemk; L-last-; return(OK); void main() SeqList *l;
11、int p,r; int *q; int i; l = (SeqList*)malloc(sizeof(SeqList); q = (int*)malloc(sizeof(int); printf(请输入线性表的长度 :); scanf(%d,&r); l-last = r-1; printf(请输入线性表的各元素值 :n); for(i=0; ilast; i+) scanf(%d,&l-elemi); printf(请输入要删除的元素位置 :n); scanf(%d,&p); DelList(l,p,q); printf(删除的元素值为 :%dn,*q); 执行结果:名师资料总结 - -
12、-精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 29 页 - - - - - - - - - 6 2.单链表的建立、插入、删除2.1 单链表的建立(尾插法)程序:#include #include #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef char ElemType; typedef struct Node /*结点类型定义 */ ElemType data; struct Node * next; Node, *LinkLi
13、st; /* LinkList为结构指针类型 */ void init_linklist(LinkList *l)/*对单链表进行初始化 */ *l=(LinkList)malloc(sizeof(Node); (*l)-next=NULL; void CreateFromTail(LinkList L) Node *r, *s; char c; int flag =1; /*设置一个标志,初值为,当输入$ 时,flag为,建表结束*/ r=L; /*r指针动态指向链表的当前表尾,以便于做尾插名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - -
14、- - - 名师精心整理 - - - - - - - 第 8 页,共 29 页 - - - - - - - - - 7 入,其初值指向头结点 */ while(flag) /*循环输入表中元素值,将建立新结点s 插入表尾*/ c=getchar(); if(c!=a) s=(Node*)malloc(sizeof(Node); s-data=c; r-next=s; r=s; else flag=0; r-next=NULL; /*将最后一个结点的next 链域置为空,表示链表的结束 */ int main() LinkList l; Node *p; init_linklist(&l); p
15、rintf(用尾插法建立单链表 , 请输入链表数据 , 以 a 结束!n); CreateFromTail(l); p = l-next; while(p!=NULL) printf(%cn,p-data); p=p-next; return 0; 执行结果:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 29 页 - - - - - - - - - 8 错误分析:在代码的时候忘记分号,导致运行错误;截图如下: 2.2 单链表的插入程序:#include common.h
16、 #include linklist.h int InsList(LinkList L,int i,ElemType e) /* 在带头结点的单链表L 中第 i 个位置插入值为 e 的新结点 s*/ Node *pre,*s; int k; pre=L; k=0; /*从头开始,查找第 i-1 个结点 */ while(pre!=NULL&knext; k=k+1; /* 查找第 i-1 结点*/ if(!pre) /*如当前位置 pre 为空表已找完还未数到第i 个,说明插入位置不合理 */ printf(插入位置不合理 !); return ERROR; s=(Node*)malloc(s
17、izeof(Node); /*申请一个新的结点S */ s-data=e; /*值 e 置入 s 的数据域 */ s-next=pre-next; /* 修改指针,完成插入操作 */ pre-next=s; return OK; void main() LinkList l; Node *p; int flag=0; int i; char c; init_linklist(&l); printf(请输入链表数据 , 以$结束!n); CreateFromTail(l); p = l-next; while(p!=NULL) printf(%cn,p-data); p=p-next; prin
18、tf(请输入插入的位置和元素 :n); scanf(%d,%c,&i,&c); printf(%cn,c); flag=InsList(l, i, c); if(flag) printf(插入操作成功 !n); else printf(插入操作失败 !n); p = l-next; while(p!=NULL) printf(%cn,p-data); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 29 页 - - - - - - - - - 10 p=p-next;
19、执行结果:2.3 单链表的删除程序:#include #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef char ElemType; typedef struct Node /* 结点类型定义 */ ElemType data; struct Node * next; Node, *LinkList; /* LinkList为结构指针类型 */ void init_linklist(LinkList *l)/*对单链表进行初始化 */ *l=(LinkList)malloc
20、(sizeof(Node); (*l)-next=NULL; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 29 页 - - - - - - - - - 11 void CreateFromTail(LinkList L) Node *r, *s; char c; int flag =1; /* 设置一个标志,初值为1,当输入 $时,flag 为 0,建表结束 */ r=L; /*r指针动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*/ while(flag
21、) /* 循环输入表中元素值,将建立新结点 s 插入表尾 */ c=getchar(); if(c!=$) s=(Node*)malloc(sizeof(Node); s-data=c; r-next=s; r=s; else flag=0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 29 页 - - - - - - - - - 12 r-next=NULL; /* 将最后一个结点的 next 链域置为空,表示链表的结束*/ int DelList(LinkLis
22、t L,int i,ElemType *e) /* 在带头结点的单链表L 中删除第 i 个元素,并将删除的元素保存到变量*e 中*/ Node *pre,*r; int k; pre=L; k=0; while(pre-next!=NULL & knext; k=k+1; /*查找第 i-1个结点*/ if(!(pre-next) /* 即 while 循环是因为 p-next=NULL 或 inext; pre-next=pre-next-next; /* 修改指针,删除结点r*/ *e = r-data; free(r); /* 释放被删除的结点所占的内存空间*/ printf(成功删除结
23、点 !n); /printf(被删除的元素是 :%cn,*e); return OK; void main() LinkList l; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 29 页 - - - - - - - - - 13 Node *p; int flag=0; int x; char*e; init_linklist(&l); printf(请输入链表数据 , 以$结束!n); CreateFromTail(l); p = l-next; while(p
24、!=NULL) printf(%cn,p-data); p=p-next; printf(请输入要删除的元素位置:n); scanf(%d,&x); e = (char*)malloc(sizeof(char); DelList(l,x,e); p = l-next; while(p!=NULL) printf(%c,p-data); p=p-next; printf(n); 执行结果:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 29 页 - - - - - - -
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年数据结构线性表单链表的查找、插入、删除知识 2022 数据结构 线性 表单 查找 插入 删除 知识
限制150内