线性表的实现与操作(二)_第1页
线性表的实现与操作(二)_第2页
线性表的实现与操作(二)_第3页
线性表的实现与操作(二)_第4页
线性表的实现与操作(二)_第5页
已阅读5页,还剩6页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验一、线性表的实现及操作(一)一、实验目的了解和掌握线性表的顺序存储结构; 掌握用 C 语言上机调试线性表的基本方法;掌握线性表的基本操作:插入、删除、查找以及线性表合并等运算在顺序存储结构和存储结构上的运算,以及对相应算法的性能分析。二、实验要求给定一段程序代码,程序代码所完成的功能为: ( 1)建立一个线性表;(2)依次输入数据元素 1,2,3,4,5,6,7,8,9,10;(3)删除数据元素 5;(4)依次显示当前线性表中的数据元素。 假设该线性表的数据元素个数在最坏情况下不会超过 100 个,要求使用顺序表。程序中有 3 处错误的地方,有标识,属于逻辑错误,对照书中的代码仔细分析后,

2、要求同学们修改错误的代码,修改后上机调试得到正确的运行结果。(1)需求分析:这份实验报告为所有必做题的实验报告。 包括实验一顺序表建立、 插入、删除等基本操作,实验二单链表的建立、插入、删除等基本操作,实验四二叉树的基本操作:树的建立、前序、中序、后序遍历及实验六图的遍历:深度优先和广度优先。这四份基础性的实验为改错性质, 将每个实验题目中的错误改正过来并通过调试,有助于对基础知识的理解与强化记忆。(2)概要设计:实验一为对顺序线性表实现插入,删除,查找等基本操作。需要用到的语句包括void ListInitiate(SeqList *L)int ListInsert(SeqList *L,

3、int i, DataType x)int ListDelete(SeqList *L, int i, DataType *x)int ListGet(SeqList L, int i, DataType *x)等。实验二是对单链表进行建立,插入,删除等基本操作。需要的语句为void ListInitiate(SeqList *L)int ListInsert(SeqList *L, int i, DataType x)int ListDelete(SeqList *L, int i, DataType *x)int ListGet(SeqList L, int i, DataType *x)

4、等。实验四为二叉树,要求建立一个二叉树,并实现前序,中序及后序的遍历。所需语句包括void ListInitiate(SeqList *L)int ListInsert(SeqList *L, int i, DataType x)int ListDelete(SeqList *L, int i, DataType *x)int ListGet(SeqList L, int i, DataType *x)等。实验六的容是图的遍历包括邻接矩阵和邻接链表两种方法。三、程序代码(更正后的代码)#include #define MaxSize100typedef int DataType;typedef

5、 structDataType listMaxSize;int size; SeqList;void ListInitiate(SeqList *L)/* 初始化顺序表L*/L-size = 0;/* 定义初始数据元素个数*/int ListLength(SeqList L)/* 返回顺序表L 的当前数据元素个数*/return L.size;int ListInsert(SeqList *L, int i, DataType x)/* 在顺序表 L 的位置 i (0 i size)前插入数据元素值 x*/ /* 插入成功返回 1,插入失败返回 0*/int j;if(L-size = Max

6、Size)printf( 顺序表已满无法插入 return 0;! n);else if(i L-size )printf( 参数return 0;i 不合法 ! n);elsefor(j = L-size; j i; j-) L-listj = L-listj; L-listi = x;/* 为插入做准备/* 插入 */*/L-size +;/* 元素个数加1*/return 1;int ListDelete(SeqList *L, int i, DataType *x)/* 删除顺序表 L 中位置 i( 0 i size - 1)的数据元素值并存放到参数x中 */* 删除成功返回 1,删除

7、失败返回0*/int j;if(L-size = 0)printf( 顺序表已空无数据元素可删! n);return 0;else if(i L-size-1)printf( 参数 i 不合法 );return 0;else/此段程序有一处错误*x = L-listi;/* 保存删除的元素到参数x 中*/for(j = i +1; j size-1; j+) L-listj = L-listj-1;/* 依次前移*/L-size-;/* 数据元素个数减1*/return 1;int ListGet(SeqList L, int i, DataType *x)/* 取顺序表 L 中第 i 个数据

8、元素的值存于x 中,成功则返回1,失败返回 0*/if(i L.size-1)printf( 参数 i 不合法 ! n);return 0;else*x = L.listi;return 1;void main(void)SeqList myList;int i , x;ListInitiate(&myList);for(i = 0; i 10; i+)ListInsert(&myList, i, i+1);ListDelete(&myList, 4, &x);for(i = 0; i ListLength(myList); i+)ListGet( myList, i, &x); /此段程序有

9、一处错误printf(%d, x);测试结果:线性表的实现及操作(二)一、实验目的了解和掌握线性表的链式存储结构;掌握用 C 语言上机调试线性表的基本方法;掌握线性表的基本操作: 插入、 删除、查找以及线性表合并等运算在顺序存储结构和存储结构上的运算,以及对相应算法的性能分析。二、实验要求给定一段程序代码,程序代码所完成的功能为:( 1)建立一个线性表; ( 2)依次输入数据元素 1,2,3,4,5,6,7,8,9,10 ;(3)删除数据元素5;( 4)依次显示当前线性表中的数据元素。假设该线性表的数据元素个数在最坏情况下不会超过100 个,要求使用单链表。程序中有 3 处错误的地方,有标识,

10、属于逻辑错误, 对照书中的代码仔细分析后,要求同学们修改错误的代码,上机调试并得到正确的运行结果。三、程序代码:(更正后的结果)#include #include #include /* 该文件包含pringtf() 等函数 */* 该文件包含exit() 等函数 */* 该文件包含malloc() 等函数 */typedef int DataType;/* 定义DataType 为 int*/typedef struct NodeDataType data;struct Node *next; SLNode;void ListInitiate(SLNode *head)/* 初始化*/* 如

11、果有存空间,申请头结点空间并使头指针head 指向头结点 */if(*head = (SLNode *)malloc(sizeof(SLNode) = NULL) exit(1);(*head)-next = NULL;/* 置链尾标记NULL */int ListLength(SLNode *head)SLNode *p = head;int size = 0;/*p 指向首元结点/*size 初始为 0*/*/while(p-next != NULL)/* 循环计数*/p = p-next;size +;return size;int ListInsert(SLNode *head, in

12、t i, DataType x)/* 在带头结点的单链表head 的数据元素ai( 0i size)结点前*/* 插入一个存放数据元素x 的结点*/SLNode *p, *q;int j;p = head;j = -1;/*p/*j指向首元结点初始为 -1*/*/while(p-next != NULL & j next;j+;if(j != i - 1)printf( 插入位置参数错!);return 0;/* 生成新结点由指针q 指示 */if(q = (SLNode *)malloc(sizeof(SLNode) = NULL) exit(1);q-data = x;/此段程序有一处错误

13、p-next = q-next;p-next = q;/* 给指针/* 给指针q-next p-next赋值 */ 重新赋值*/return 1;int ListDelete(SLNode *head, int i, DataType *x)/* 删除带头结点的单链表head 的数据元素ai(0 /* 删除结点的数据元素域值由x 带回。删除成功时返回i size - 1)结点 */1;失败返回0*/SLNode *p, *s;int j;p = head;/*p 指向首元结点j = -1;/*j 初始为 -1*/while(p-next != NULL & p-next-next!= NULL

14、 & j next;j+;if(j != i - 1)printf( 插入位置参数错!return 0;);/此段程序有一处错误s = p-next;*x = s-data;p-next = s-next;free(s);/* 指针 s 指向数据元素ai 结点 */* 把指针 s 所指结点的数据元素域值赋予/* 把数据元素ai 结点从单链表中删除指*/* 释放指针s 所指结点的存空间*/x*/return 1;int ListGet(SLNode *head, int i, DataType *x)/* 取数据元素ai 和删除函数类同,只是不删除数据元素ai 结点 */SLNode *p;in

15、t j;p = head;j = -1;while(p-next != NULL & j next;j+;if(j != i)printf( 取元素位置参数错!);return 0;/此段程序有一处错误*x = p-data;return 1;void Destroy(SLNode *head)SLNode *p, *p1;p = *head;while(p != NULL)p1 = p;p = p-next;free(p1);*head = NULL;void main(void)SLNode *head;int i , x;ListInitiate(&head);/* 初始化 */for(i = 0; i 10; i+)if(ListInsert(head, i, i+1) = 0)/* 插入 10 个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论