当前位置:   article > 正文

实验一 顺序表_建立一个线性表,首先依次输入数据元素

建立一个线性表,首先依次输入数据元素

数据结构实验报告

  1. 问题描述及分析

问题描述:完成顺序表软工具箱的创建,并验证课本例2-1、2-2。

分析:首先建立一个顺序表软工具箱,然后根据题目要求,能够在顺序表的任意位置插入、删除结点以及确定某一元素在链表中的位置。

  1. 建立顺序表功能

建立一个顺序表,确定DataType与MaxSize。

  1. 初始化

将顺序表初始化。

  1. 插入功能

输入的形式与输入值的范围:输入一个表示插入位置且小于MaxSize的非负整数和一个表示元素值的形式为DataType的数。

输出的形式:如果输入的参数不合法或顺序表已满,则显示参数错误信息。

返回值:插入成功返回1,插入失败返回0。

测试数据:在建立顺序表且DataType为int、maxsize为10的基础上,做以下测试:

  1. 输入3 8,运行成功。
  2. 输入15 24,显示参数错误信息。
  3. 输入5 n,显示参数错误信息。
  4. 若顺序表已满,显示参数错误信息。
  1. 删除功能

输入的形式与输入值的范围:输入一个表示删除位置且小于MaxSize的非负整数。

输出的形式:如果输入的参数不合法或顺序表为空,则显示参数错误信息。

返回值:删除成功返回1,删除失败返回0。

测试数据:在建立顺序表且DataType为int、MaxSize为10的基础上,做以下测试:

  1. 输入12,显示参数错误信息。
  2. 输入1,运行成功。
  3. 若顺序表为空,显示参数错误信息。
  1. 查找功能

输入的形式与输入值的范围:输入一个表示查找位置且小于MaxSize的非负整数。

输出的形式:如果输入的参数不合法,则显示参数错误信息。

返回值:查找成功返回1,查找失败返回0。

测试数据:在建立顺序表且DataType为int、MaxSize为10的基础上,做以下测试:

a)输入12,显示参数错误信息。

b)输入1,运行成功。

2.概要设计

(1)为了实现上述程序功能,先定义一个简化的包含抽象数据类型的头文件

  1. typedef struct
  2. {
  3. DataType list[MaxSize];
  4. int size;
  5. }SeqList;
  6. void ListInitiate(SeqList *L);//初始化顺序表
  7. int ListInsert(SeqList *l,int i,DataType x);//插入元素
  8. int ListDelete(SeqList *l,int i,DataType *x);//删除元素
  9. int ListGet(SeqList,int i,DataType *x);//取元素
  10. int ListLength(SeqList L);//返回当前元素个数

(2)程序包含的模块

主函数main()

初始化顺序表函数 ListInitiate(SeqList *L);

插入元素函数ListInsert(SeqList *l,int i,DataType x);

删除元素函数ListDelete(SeqList *l,int i,DataType *x);

提取元素函数ListGet(SeqList,int i,DataType *x);

当前元素个数函数ListLength(SeqList L);

(3)主函数的伪码

  1. main(){
  2.     定义一个顺序表myList;
  3.     初始化myList;
  4.     建立myList;
  5.     删除某一元素;
  6.     循环以下处理,直至结束:
  7. {
  8. 取顺序表元素并输出;
  9. }
  10. }

3.详细设计

结合概要设计中定义的包含抽象类型的头文件,进行数据结构设计和算法设计。

  1. 数据结构
  1. typedef int DataType;
  2. #define MaxSize 100
  3. typedef struct
  4. {
  5. DataType list[MaxSize];
  6. int size;
  7. }SeqList;
  1. 基本操作的伪码算法

初始化顺序表

  1. void ListInitiate(SeqList *L)
  2. {
  3. >size=0;
  4. }

返回当前元素个数

  1. int ListLength(SeqList L)
  2. {
  3. return L.size;
  4. }

插入元素

  1. int ListInsert(SeqList *L,int i,DataType x)
  2. {
  3. int j;
  4. if(L->size>=maxsize)
  5. {
  6. printf("FULL\n");
  7. return 0;
  8. }
  9. else if(i<0||i>L->size)
  10. {
  11. printf("i ERROR\n");
  12. return 0;
  13. }
  14. else
  15. {
  16. for(j=L->size;j>i;j--)
  17. {
  18. L->list[j]=L->list[j-1];
  19. L->list[i]=x;
  20. L->size++;
  21. return 1;
  22. }
  23. }

删除元素

  1. int ListDelete(SeqList *L,int i,DataType *x){
  2.     int j;
  3.     if(L->size<=0){
  4.     printf("EMPTY\n");
  5. return 0;
  6. }
  7.     else if(i<0||i>L->size-1){
  8.     printf("i ERROR\n");
  9. return 0;
  10. }
  11.     else{
  12.     *x=L->list[i];
  13.     for(j=i+1;j<=L->size-1;j++)
  14. L->list[j-1]=L->list[j];
  15.     L->size--;
  16.     return 1;
  17. }
  18. }

取元素

  1. int ListGet(SeqList L,int i,DataType *x){
  2.     if(i<0||i>L.size-1){
  3. printf("i ERROR\n");
  4. return 0;   
  5. }
  6.     else{
  7. *x=L.list[i];
  8.     return 1;
  9. }
  10. }

实验内容:

[例2-1]编程实现如下任务: 建立一个线性表,首先依次输入数据元素1,2,3,...,10。然后删除数据元素5,最后依次显示当前线性表中的数据元素。假设该线性表的数据元条个数在最坏情况下不会超过100个。要求使用顺序表。

实验代码:

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define MaxSize 100   //定义maxsize为100
  4. typedef int DataType;//定义DataType为int型í#include "SeqList.h"//包含SeqList.h头文件
  5. void main(void)
  6. {
  7.     SeqList myList;
  8.     int i,x;
  9.     ListInitiate(&myList);//初始化函数调用
  10.     for(i=0;i<10;i++)     //插入10个数据元素
  11.          ListInsert(&myList,i,i+1);//插入函数调用(依次插入1,2,3...)
  12.     ListDelete(&myList,4,&x);//删除函数调用
  13.     //显示循序表当前数据元素
  14.     for(i=0;i<ListLength(&myList);i++)//当前元素个数函数调用去
  15.     {
  16.          ListGet(&myList,i,&x);//取元素函数调用
  17.          printf("%d   ",x);//显示数据元素
  18.     }
  19.     system("pause");
  20. }

[例2-2]编程实现如下任务: 建立一个如表2-1所示的学生情况表,要求先依次输入数据元素,然后依次显示当前表中的数据元素。假设该表数据元素个数在最坏情况下不会超过100个。要求使用顺序表。

实验代码:

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include "SeqList1.h"
  4. void main(void)
  5. {
  6.     SeqList myList;
  7.     int i;
  8.     Student x[3] = {{2000001, "张三" , "男" , 20},
  9.                     {2000002, "李四" ,"男" , 20},
  10.                     {2000003, "王五" , "女" , 20}};
  11.     Student s;
  12.     ListInitiate(&myList) ;
  13.     ListInsert(&myList , 0 , x[0]);
  14.     ListInsert(&myList , 1 , x[1]);
  15.     ListInsert(&myList , 2 , x[2]);
  16.     for(i=0 ; i<ListLength(myList);i++)
  17.     {
  18.          ListGet(myList , i , &s);
  19.          printf("%d %s %s %d \n",s.number,s.name,s.sex,s.age);
  20.     }
  21.     system("pause");
  22. }

  1. 调试与分析

 

该结果与预期结果一致

  1. 使用说明

程序执行过程如下:

  1. 输出1 2 3 4 6 7 8 9 10
  2. 输出2000001  张三  男  20

2000002  李四  男  21

2000003  王五  女  22

  1. 总结

经过调试与测试,实验结果与测试预期一致。顺序表是计算机内存以数组形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用的顺序存储方式存储就称之为顺序表。通过本次实验,掌握了定义线性表的顺序存储类型,加深了对顺序存储结构的理解,进一步巩固和理解了顺序表的基本操作,如建立、查找、插入和删除等。同时,也体会到顺序存储结构的缺点:在插入或删除操作时,需要移动大量的元素,且长度相对固定,当表中数据元素个数较多且变化较大时,操作复杂。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/590813
推荐阅读
相关标签
  

闽ICP备14008679号