数据结构上机实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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。

相关文档
最新文档