实验一、线性表的实现及操作(一
一、实验目的
了解和掌握线性表的顺序存储结构;掌握用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小时内删除。