数据结构实验一
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验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 //表中元素的最大个数
typedefintElemType; //元素类型
typedefstruct
{
ElemType*elem; //线性表
int length; //表的实际长度
intlistsize; //当前分配的存储容量
}SqList; //顺序表的类型名
3.建立顺序表时可利用随机函数自动产生数据。
注意问题:
1、插入、删除时元素的移动原因、方向及先后顺序。
2、理解函数形参与实参的传递关系。
部分源代码:
DS.h
#include
#include
#include
#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedefint Status;
SqList.h
#ifndef SQLIST_H_INCLUDED
#define SQLIST_H_INCLUDED
#include "DS.h"
typedefintElemType;
typedefstruct
{
ElemType *elem;
int length;
intlistsize;
}SqList;
void menu();
Status InitList_Sq(SqList&L, int n);/*初始化顺序表*/
Status CreateList_Sq(SqList&L);/*建立顺序表*/
void PrintList_Sq(SqList L);/*输出顺序表*/
Status DeleteList_Sq(SqList&L,inti,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, SqListLb, SqList&Lc );/*两个非递减有序表A和B,并把它们合并成一个非递减有序表C*/
#endif // SQLIST_H_INCLUDED
SqList.cpp
#include "SqList.h"
void menu()
{
printf("\t\t\t 顺序表基本操作\n\n");
printf("\t\t\t1.建立顺序表\n");
printf("\t\t\t2.遍历顺序表\n");
printf("\t\t\t3.删除第i个元素\n");
printf("\t\t\t4.删除值为x 的元素\n");
printf("\t\t\t5.奇数排在偶数之前\n");
printf("\t\t\t6.插入法生成递增有序表\n");
printf("\t\t\t7.两个非递减有序表La和Lb合并成非递减有序表Lc\n"); printf("\t\t\t0.退出\n\n");
}
/*初始化顺序表*/
Status InitList_Sq(SqList&L, int n)
{
L.elem=(ElemType*)malloc(n*sizeof(ElemType));
if(!L.elem) exit(OVERFLOW);
L.length=0;
L.listsize=n;
return OK;
}
/*建立顺序表*/
Status CreateList_Sq(SqList&L)
{
}
/*输出顺序表*/
void PrintList_Sq(SqList L)
{
}
/*删除第i个元素*/
Status DeleteList_Sq(SqList&L,inti,ElemType&e)
{