数据结构实验报告_14.docVIP

  • 0
  • 0
  • 约6.2千字
  • 约 21页
  • 2023-10-14 发布于湖北
  • 举报
数据结构实验报告 实验名称:数据结构实验 学号:jhkjjh 姓名:gfgj 指导老师:kjuy 计算机与信息学院 实验1线性表的抽象数据类型的实现 实验目的 掌握线性表的顺序存储结构和链式存储结构; 熟练掌握顺序表和链表基本算法的实现; 掌握利用线性表数据结构解决实际问题的方法和基本技巧; 按照实验题目要求独立正确地完成实验内容(编写、调试算法程序,提交程序清单及及相关实验数据与运行结果); 实验环境 计算机、C语言程序设计环境 实验学时 4学时,必做实验。 实验内容 一、顺序表的基本操作实现实验 要求:数据元素类型ElemType取整型int。按照顺序存储结构实现如下算法(各算法边界条件和返回结果适当给出): 创建任意整数线性表(即线性表的元素值随机在键盘上输入),长度限定在20之内; 打印(遍历)该线性表(依次打印出表中元素值); 在线性表中查找第i个元素,并返回其值; 在线性表中第i个元素之前插入一已知元素; 在线性表中删除第i个元素; 求线性表中所有元素值(整数)之和; 二、链表(带头结点)基本操作实验 要求:数据元素类型ElemType取字符型char。按照动态单循环链表结构实现如下算法(各算法边界条件适当给出): 创建任意字符型有序(递增排序)单循环链表(即链表的字符元素随机在键盘上输入),长度限定在15之内; 打印(遍历)该链表(依次打印出表中元素值); 在链表中查找第i个元素,i合法返回元素值,否则,返回FALSE; 在链表中查找与一已知字符相同的第一个结点,有则返回TRUE,否则,返回FALSE; 在链表中按照有序方式插入一已知字符元素; 在线性表中删除第i个结点; 计算链表的长度。 实验步骤 先给出重点部分的流程图(不是整个程序,是部分),然后把编写的代码贴上来(注意要编辑下,不要直接放这里) 1.线性表的删除操作 void DelList(SqList *L,int i)//---------线性表的删除操作 { int j; if(i1||iL-last); printf(删除错误,无此元素); for(j=i;j=L-last;j++) L-Elem[j]=L-Elem[j+1]; L-last--; } 2.线性表的插入运算 Status ListInsert(SqList *L, int i, ElemType e)//-------插入元素操作 { int j; if(i1||iL-last+2)//此处必须为Last+2,当i为last+3时,操作不合法 { printf(插入操作不合法); return(ERROR); } if(L-last=ListSize-1) printf(表已满无法插入); for(j=L-last;j=i-1;j--) L-Elem[j+1]=L-Elem[j]; L-Elem[i-1]=e; L-last++; return OK; } 3.为插法建立单链表 void CreateFromTail(LinkList L)//--尾插法建表 { LinkList r,s; int flag=1; ElemType c; r=L;//动态指针,指向表尾 while(flag) { printf(请输入一个结点(字符型)); c=getchar(); if(c!=$)//$为结束符 { s=(LinkList)malloc(sizeof(Node)); s-data=c; r-next=s; r=s; } else { flag=0; r-next=NULL; } }//while }//CreateFromTail 4.单链表的删除操作 int DelList(LinkList L,int i,ElemType *e)//-- ---删除操作 { LinkList p,r; int k=0; p=L; while(p-next!=NULLki-1) { p=p-next; k++; } if(k!=i-1) { printf(删除非法); return ERROR; } r=p-next; p-next=p-next-next; *e=r-date; free(r); return OK; } 5.单链表的插入操作 status InsList(LinkList L,int i,ElemType e) { LinkList p,s; int k; p=L; k=0; while(p-next!=NULLki-1) { p=p-next; k++;

文档评论(0)

1亿VIP精品文档

相关文档