数据结构线性表单链表查找、插入、删除

上传人:第*** 文档编号:58153030 上传时间:2018-10-27 格式:DOC 页数:29 大小:348KB
返回 下载 相关 举报
数据结构线性表单链表查找、插入、删除_第1页
第1页 / 共29页
数据结构线性表单链表查找、插入、删除_第2页
第2页 / 共29页
数据结构线性表单链表查找、插入、删除_第3页
第3页 / 共29页
数据结构线性表单链表查找、插入、删除_第4页
第4页 / 共29页
数据结构线性表单链表查找、插入、删除_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《数据结构线性表单链表查找、插入、删除》由会员分享,可在线阅读,更多相关《数据结构线性表单链表查找、插入、删除(29页珍藏版)》请在金锄头文库上搜索。

1、实验报告课程名称 数据结构姓 名学 号专业班级指导教师目录目录第二章线性表的查找、插入、删除第二章线性表的查找、插入、删除11.1 顺序表的查找11.2 顺序表的插入21.3 顺序表的删除4单链表的建立、插入、删除单链表的建立、插入、删除.62.1 单链表的建立(尾插法)62.2 单链表的插入82.3 单链表的删除10第三章栈第三章栈143.1 链栈.143.2 顺序栈 163.3 队列.183.4 杨辉三角20第四章串第四章串234.1 字符串的建立.234.2 顺序串的插入.251.线性表的查找、插入、删除线性表的查找、插入、删除1.1 顺序表的查找顺序表的查找程序:#include #i

2、nclude #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define ElemType int #define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度 */ typedef struct ElemType elemMAXSIZE; /*线性表占用的数组空间*/ int last; /*记录线性表中最后一个元素在数组 elem中的位置 (下标值),空表为-1*/ Seqlist; int Locate(Seqlist L,ElemType e) /*在顺序表 L 中

3、查找与 e 相等的元素,若 L。elemi=e,则找到该元素,并返 回 i+1,若找不到,则返回-1*/ int i=0; /*i 为扫描计数器,初值为 0,即从第一个元素开始比较*/ while (i #include /#include #define OK 1 #define ERROR 0 #define TRUE 1#define FALSE 0#define ElemType int #define MAXSIZE 100 typedef struct ElemType elemMAXSIZE; int last; SeqList; /#include “common.h“ /#i

4、nclude “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=(SeqLi

5、st*)malloc(sizeof(SeqList); printf(“请输入线性表的长度:“); scanf(“%d“, l-last = r-1; printf(“请输入线性表的各元素值:n“);for(i=0; ilast; i+) scanf(“%d“, printf(“请输入要插入的位置:n“); scanf(“%d“, printf(“请输入要插入的元素值:n“); scanf(“%d“, InsList(l,p,q); for(i=0; ilast; i+) printf(“%d “,l-elemi); 执行结果:1.3 顺序表的删除顺序表的删除程序: #include #inc

6、lude #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define ElemType int #defineMAXSIZE 100 typedef struct 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

7、+) L-elemk-1 = L-elemk; L-last-; return(OK); void main() SeqList *l; int p,r; int *q; int i; l = (SeqList*)malloc(sizeof(SeqList); q = (int*)malloc(sizeof(int); printf(“请输入线性表的长度:“); scanf(“%d“, l-last = r-1; printf(“请输入线性表的各元素值:n“); for(i=0; ilast; i+) scanf(“%d“, printf(“请输入要删除的元素位置:n“); scanf(“%d

8、“, DelList(l,p,q); printf(“删除的元素值为:%dn“,*q); 执行结果: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, *LinkList; /* LinkList 为结构指针类型*/ void

9、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 指针动态指向链表的当前表尾,以便于做尾插 入,其初值指向头结点*/while(flag) /*循环输入表中元素值,将建立新结点 s 插入表尾 */c=getchar();if(c!=a)s=(Node*)m

10、alloc(sizeof(Node);s-data=c;r-next=s;r=s;elseflag=0;r-next=NULL; /*将最后一个结点的 next 链域置为空,表示 链表的结束*/ int main() LinkList l;Node *p;init_linklist(printf(“用尾插法建立单链表,请输入链表数据,以 a 结束!n“);CreateFromTail(l);p = l-next;while(p!=NULL)printf(“%cn“,p-data);p=p-next;return 0; 执行结果:错误分析:在代码的时候忘记分号,导致运行错误;截图如下: 2.2

11、单链表的插入单链表的插入程序: #include “common.h“ #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!=NULLk=k+1; /*查找第 i-1 结点*/ if(!pre) /*如当前位置 pre 为空表已找完还未数到第 i 个,说明插 入位置不合理*/ printf(“插入位置不合理!“); r

12、eturn ERROR; s=(Node*)malloc(sizeof(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( printf(“请输入链表数据,以$结束!n“); CreateFromTail(l); p = l-next; while(p!=NULL) printf(“%cn

13、“,p-data); p=p-next; printf(“请输入插入的位置和元素:n“); scanf(“%d,%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); p=p-next; 执行结果:2.3 单链表的删除单链表的删除程序: #include #include #include #define OK 1 #define ERROR 0 #defi

14、ne 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(sizeof(Node);(*l)-next=NULL;void CreateFromTail(LinkList L)Node *r, *s;char c;int flag

15、 =1; /*设置一个标志,初值为 1,当输入“$“时,flag 为 0,建表结束*/r=L; /*r 指针动态指向链表的当前表尾,以便于做尾 插入,其初值指向头结点*/while(flag) /*循环输入表中元素值,将建立新结点 s 插入表 尾*/c=getchar();if(c!=$)s=(Node*)malloc(sizeof(Node);s-data=c;r-next=s;r=s;elseflag=0;r-next=NULL; /*将最后一个结点的 next 链域置为空,表示链表的结束*/ int DelList(LinkList L,int i,ElemType *e) /*在带头结点的单链表 L 中删除第 i 个元素,并将删除的元素保存到变量*e 中 */ Node *pre,*r; in

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 事务文书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号