数据结构实验指导书(1) 联系客服

发布时间 : 星期三 文章数据结构实验指导书(1)更新完毕开始阅读

数据结构试验指导书

实验01 顺序表的基本操作

实验学时:2学时 实验类型:上机

背景知识:顺序表的插入、删除及应用。

目的要求:

1.掌握顺序存储结构的特点。 2.掌握顺序存储结构的常见算法。

实验内容:

编写一个完整的程序,实现顺序表的生成、插入、删除、输出等基本运算。 (1) 建立一个顺序表,含有n个数据元素。 (2) 输出顺序表。

(3) 在顺序表中删除值为x的结点或者删除给定位置i的结点。

(4) 实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。 (5) 输入整型元素序列,利用有序表插入算法建立一个有序表。

(6) *利用算法5建立两个非递减有序表A和B,并把它们合并成一个非递减有序表C。 (7) 在主函数中设计一个简单的菜单,分别测试上述算法。 (8) *综合训练:

利用顺序表实现一个班级学生信息管理(数据录入、插入、删除、排序、查找等)。

实验说明:

1.请构建多文件程序,算法1至算法6对应的函数原型声明存放在头文件SqList.h中,对应的函数实现存放在源文件SqList.c中;main()函数存放在另一个源文件中,该文件包含头文件SqList.h即可。

2.类型定义

#define MAXSIZE 100 //表中元素的最大个数 typedef int ElemType; //元素类型 typedef struct {

ElemType *elem; //线性表 int length; //表的实际长度 int listsize; //当前分配的存储容量 }SqList; //顺序表的类型名

3

数据结构试验指导书

3.建立顺序表时可利用随机函数自动产生数据。

注意问题:

1、 插入、删除时元素的移动原因、方向及先后顺序。 2、 理解函数形参与实参的传递关系。

部分源代码: DS.h

#include #include #include #include

#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0

typedef int Status;

SqList.h

#ifndef SQLIST_H_INCLUDED #define SQLIST_H_INCLUDED

#include \

typedef int ElemType; #define LIST_INIT_SIZE 50 typedef struct {

ElemType *elem; int length; int listsize; }SqList;

void menu();

Status InitList_Sq(SqList &L);/*初始化顺序表*/ Status CreateList_Sq(SqList &L);/*建立顺序表*/

4

数据结构试验指导书

void PrintList_Sq(SqList L);/*输出顺序表*/

Status DeleteList_Sq(SqList &L,int i,ElemType &e);/*删除第i个元素*/ Status DeleteListX_Sq(SqList &L,ElemType x);/*删除值为x的元素*/ Status AdjustList_Sq(SqList &L);/*奇数排在偶数之前*/

Status OrderList_sq(SqList &L, int n);/*插入法生成递增有序表*/

void MergeList_Sq(SqList La, SqList Lb, SqList &Lc );/*两个非递减有序表A和B,并把它们合并成一个非递减有序表C*/

#endif // SQLIST_H_INCLUDED

SqList.cpp

#include \

void menu() {

printf(\ 顺序表基本操作\\n\\n\ printf(\建 立 顺 序 表\\n\ printf(\遍 历 顺 序 表\\n\ printf(\删 除 第 i 个 元 素\\n\ printf(\删 除 值 为 x 的 元 素\\n\ printf(\奇 数 排 在 偶 数 之 前\\n\ printf(\插 入 法 生 成 递 增 有 序 表\\n\

printf(\两个非递减有序表La和Lb合并成非递减有序表Lc\\n\ printf(\退 出\\n\\n\}

/*初始化顺序表*/

Status InitList_Sq(SqList &L) {

L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!L.elem) exit(OVERFLOW); L.length=0;

L.listsize=LIST_INIT_SIZE; return OK; }

5

数据结构试验指导书

/*建立顺序表*/

Status CreateList_Sq(SqList &L) {

int n, i;

printf(\请输入顺序表长度:\ scanf(\

if(n < LIST_INIT_SIZE && InitList_Sq(L)) {

printf(\请输入%d个元素:\ for(i = 0; i < n; i++) {

scanf(\ }

L.length = n; return OK; } else

return ERROR; }

/*输出顺序表*/

void PrintList_Sq(SqList L) { int i;

printf(\顺序表中元素为:\\n\ for(i = 0; i < L.length; i++) {

printf(\ }

printf(\}

/*删除第i个元素*/

Status DeleteList_Sq(SqList &L,int i,ElemType &e) {

ElemType *p, *q;

if( (i<1) || (i>L.length) ) return ERROR; p = &(L.elem[i-1]); e = *p;

6