实验一、线性表的实现及操作(一)
一、实验目的
了解和掌握线性表的顺序存储结构;掌握用C语言上机调试线性表的基本方法;掌握线性表的基本操作:插入、删除、查以及线性表合并等运算在顺序存储结构和链接存储结构上的运算,以及对相应算法的性能分析。
二、实验要求
给定一段程序代码,程序代码所完成的功能为:(1)建立一个线性表;(2)依次输入数据元素1,2,3,4,5,6,7,8,9,10;(3)删除数据元素5;(4)依次显示当前线性表中的数据元素。假设该线性表的数据元素个数在最坏情况下不会超过100个,要求使用顺序表。
程序中有3处错误的地方,有标识,属于printf怎么实现的逻辑错误,对照书中的代码仔细分析后,要求同学们修改错误的代码,修改后上机调试得到正确的运行结果。
(1)需求分析:
这份实验报告为所有必做题的实验报告。包括实验一顺序表建立、插入、删除等基本操作,实验二单链表的建立、插入、删除等基本操作,实验四二叉树的基本操作:树的建立、前序、中序、后序遍历及实验六图的遍历:深度优先和广度优先。这四份基础性的实验为改错性质,将每个实验题目中的错误改正过来并通过调试,有助于对基础知识的理解与强化记忆。
(2)概要设计:
实验一为对顺序线性表实现插入,删除,查等基本操作。
需要用到的语句包括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)等。
实验二是对单链表进行建立,插入,删除等基本操作。
需要的语句为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)等。
实验四为二叉树,要求建立一个二叉树,并实现前序,中序及后序的遍历。
所需语句包括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 <stdio.h>
#define MaxSize 100
typedef int DataType;
typedef struct
{
DataType list[MaxSize];
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 >= MaxSize)
{
printf("顺序表已满无法插入! \n");
return 0;
}
else if(i < 0 || i > L->size )
{
printf("参数i不合法! \n");
return 0;
}
else
{
for(j = L->size; j > i; j--) L->list[j] = L->list[j]; /*为插入做准备*/
L->list[i] = x; /*插入*/
L->size ++; /*元素个数加1*/
return 1;
}
}
int ListDelete(SeqList *L, int i, DataType *x)
/*删除顺序表L中位置i(0 ≤ i ≤ size - 1)的数据元素值并存放到参数x中*/
/*删除成功返回1,删除失败返回0*/
{
int j;
if(L->size <= 0)
{
printf("顺序表已空无数据元素可删! \n");
return 0;
}
else if(i < 0 || i > L->size-1)
{
printf("参数i不合法");
return 0;
}
else
{//此段程序有一处错误
*x = L->list[i]; /*保存删除的元素到参数x中*/
for(j = i +1; j <= L->size-1; j++) L->list[j] = L->list[j-1]; /*依次前移*/
L->size--; /*数据元素个数减1*/
return 1;
}
}
int ListGet(SeqList L, int i, DataType *x)
/*取顺序表L中第i个数据元素的值存于x中,成功则返回1,失败返回0*/
{
if(i < 0 || i > L.size-1)
{
printf("参数i不合法! \n");
return 0;
}
else
{
*x = L.list[i];
return 1;
}
}
void main(void)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论