数据结构上机实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构上机实验
本课程实验中已知的预定义常量和类型如下:
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
实验一顺序表(一)
一、实验目的
掌握顺序表的定义、存储结构及其基本操作。
二、实验内容
已知:线性表的动态分配顺序存储结构为
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct{
int *elem;
int length;
int listsize;
}SqList;
在主程序中调用如下函数实现构造线性表,在线性表中插入数值,最后输出线性表。
1. 编写函数,Status InitList(SqList *L) 实现构造一个空的线性表,若构造成功则返回OK,否则返回ERROR。
2. 编写函数,Status ListInsert(SqList *L , int i , int e) 实现在线性表L中第i个位置之前插入新的数据元素e,L的长度加1。若插入成功返回OK,否则返回ERROR。
(提示:i的合法值为:i>=1&&i<=L—>length+1)
3. 编写函数,void ListPrint(SqList *L)实现将线性表中的元素依次输出到屏幕上。
4.编写函数,int Menu(),输出菜单项
请选择你要进行的操作(请输入1-4中的任一个数字):
输入1:InitList
2:ListInsert
3:ListPrint
4:Exit
实验二顺序表(二)
一、实验目的
掌握顺序表的定义、存储结构及其基本操作。
二、实验内容
在实验一的基础上,继续完成如下实验内容。
1.编写函数,Status ListDelete(Splist *L ,int i ,int *e),实现删除L的第i个数据元素,并用e返回其值,L的长度减1。删除成功返回OK(1),否则返回ERROR(0)。
(提示:i的合法值为:i>=1&&i<=L—>length)
2.编写函数Status GetElem(SqList *L,int i,int *e),实现用e将线性表中第i个数据元素返回。若返回成功则函数返回OK(1),否则返回ERROR(0)。(提示:i的合法值为:i>=1&&i<=L—>length)3.编写函数,int Menu(),输出菜单项
请选择你要进行的操作(请输入1-6中的任一个数字):
输入1:InitList
2:ListInsert
3:ListPrint
4:ListDelete
5:GetElem
6:Exit
实验三顺序表(三)
一、实验目的
掌握顺序表的定义、存储结构及其基本操作。
二、实验内容
在实验二的基础上,继续完成如下实验内容。
在main函数中分别调用initList和ListInsert函数生成2个按值非递减有序的线性表La和Lb,然后再调用MergeList函数完成将LA和LB归并为一个新的线性表LC,且LC中的数据元素仍按值非递减有序排列。最后输出LC。
1.编写函数,void MergeList(SqList *La, SqList *Lb,SqList *Lc)。(参考教材P21)
2.编写函数,int Menu(),输出菜单项
请选择你要进行的操作(请输入1-7中的任一个数字):
输入1:InitList
2:ListInsert
3:ListPrint
4:ListDelete
5:GetElem
6:Merge
7:Exit
实验四单链表(一)
一、实验目的
掌握单链表的定义、存储结构及其基本操作。
二、实验内容
已知线性表的单链表存储结构为
typedef struct LNode{
int data;
sturct LNode *next;
}LNode ,*LinkList
在主程序中调用如下函数实现单链表的建立,在单链表中中插入结点,最后输出单链表。
1. 编写函数,void CreateList(LinkList *L,int n) 动态生成一个单链表。(L为单链表的头指针,它指向表中的第一个结点。)
2. 编写函数,Status ListInsert(LinkList L , int i , int e) 实现在单链表L中第i个位置之前插入新的数
据元素e。若插入成功返回OK,否则返回ERROR。
3. 编写函数,void ListPrint(LinkList L)实现将单链表的元素依次输出到屏幕上。
4.编写函数,int Menu(),输出菜单项
请选择你要进行的操作(请输入1-4中的任一个数字):
输入1:CreateList
2:ListInsert
3:ListPrint
4:Exit
实验五单链表(二)
一、实验目的
掌握单链表的定义、存储结构及其基本操作。
二、实验内容
在实验四的基础上,继续完成如下实验内容,在已存在的单链表中删除结点,将2个有序链表合并成一个有序链表。
1. 编写函数,void ListDelete(LinkList L,int i,int * e) 在单链表L中删除第i个元素,并由e返回其值。若删除成功返回OK(1),否则返回ERROR(0)。
2. 编写函数,void Merge(LinkList La,LinkList Lb,LinkList *Lc),完成已知两个按值非递减有序排列的单链表La和Lb,归并La和Lb得到一个新的单链表Lc,Lc的元素也按值非递减有序排列。(参考教材P31)
3.改写int Menu(),输出菜单项
请选择你要进行的操作(请输入1-6中的任一个数字):
输入1:CreateList
2:ListInsert
3:ListPrint
4:ListDelete
5:Merge
6:Exit
实验六栈(一)
一、实验目的
掌握栈的定义、栈的顺序存储结构及其基本操作。
二、实验内容
已知栈的顺序存储表示
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct
{int *base;
int *top;
int stacksize;
}SqStack;
在主程序中调用如下函数实现栈的初始化,在栈中插入数值,最后输出栈中元素。
1. 编写函数,Status InitStack(SqStack *S) ,构造一个空栈,成功返回OK,否则返回ERROR。