《数据结构》实验题目
实验0 预备实验
试用C语言的结构类型定义表示复数Complex的抽象数据类型。
(1)在复数内部用浮点数定义其实部与虚部;
(2)设计实现复数的+、-、×、÷等运算的函数。
基本操作函数接口:
InitComplex( &Z, v1, v2 ):操作结果:构造复数Z,其实部和虚部分别被赋以参数v1和v2的值。
Add( z1,z2, &sum ):初始条件:z1,z2是复数。
操作结果:用sum返回两个复数z1,z2的和值。
Sub( z1,z2, &residue):初始条件:z1,z2是复数。
操作结果:用res返回两个复数z1,z2的差值。
mul( z1,z2, &product ):初始条件:z1,z2是复数。
操作结果:用product返回两个复数z1,z2的积。
div( z1,z2, "ient,&residue):初始条件:z1,z2是复数。
操作结果:用quotient 返回两个复数z1除z2的商, 用residue返回它们的余数。
要求main函数中只能是基本的输入输出语句和函数调用语句,其运行界面如下:
please input first complex number : a + bi
the other one : c+ di
please choice operation: +, -, * or /:+
(a + bi)+ (c+ di)=……
其中a,b,c,d是用户从键盘上输入的实型值,分别代表两个复数的实部和虚部。
实验1、线性表的基本操作
1、实验目的
1)掌握线性表的基本运算。
2)掌握顺序存储的概念,学会对顺序存储数据结构进行操作。
3)加深对顺序存储数据结构的理解,逐步培养解决实际问题的编程能力。
2、实验内容
1)基础题
(1)编写顺序表基本操作函数。
typedef struct {
ElemType *elem; // 存储空间基址(表空间—数组)
int length; // 当前长度
int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位)
} SqList; // 俗称 顺序表
①初始化线性表 void InitList_Sq(SqList &L)
②向线性表指定位置插入元素 void ListInsert_Sq(SqList &L, int pos, ElemType e)
③删除指定元素值的线性表记录 void ListDelete1_Sq(SqList &L, ElemType e, int &pos)
④删除指定位置的线性表记录void ListDelete2_Sq(SqList &L, int pos, ElemType &e)
⑤查线性表中的元素 int LocateElem_Sq(SqList L, ElemType e)
⑥输出线性表元素 void OutputList(SqList L)
(2)调用上述函数实现下列操作,操作步骤如下。
①初始化顺序表。
②调用插入函数建立一个顺序表。
③在顺序表中查指定的元素。
④在顺序表中删除指定值的元素。
⑤在顺序表中删除指定位置的元素
⑥遍历并输出顺序表。
注意 每完成一个步骤,必须及时输出顺序表元素,便于观察操作结果。
实验2、链表的基本操作
1、实验目的
1)掌握链表的概念,学会对链轰进行操作。
2)加深对链式存储数据结构的理解,逐步培养解决实际问题的编程能力。
2、实验内容
(1)编写链表基本操作函数。
typedef struct Lnode {
ElemType data; // 数据域
struct Lnode *next; // 指针域
} LNode, *LinkList;
ElemType data; // 数据域
struct Lnode *next; // 指针域
} LNode, *LinkList;
①初始化链表 CreateList_L(LinkList &L, int n) /*输入n个元素的值,建立带表头结点的单链线性表L*/
②向链表指定位置插人元素 InsertList(LinkList &L, ElemType item, int re ) /*在表L的第rc位置上插入item元素*/
③向有序链表指定位置插人元素InsertList(LinkList &L, ElemType item) /*向有序链表L插入键值为item的结点*/
④删除指定元素值的链表记录 DeleteList(LinkList &L, ElemType item )
⑤查链表中的元素 int FindList(LinkList L, ElemType item )
⑧输出链表元素 OutputLis( LIST L )
(2)调用上述函数实现下列操作,操作步骤如下。
①初始化链表。
②调用插人函数建立一个链表。
③在链表中寻指定的元素。
④在链表中删除指定值的元素。
⑤遍历并输出链表。
注意 每完成一个步骤、必须及时输出链表元素,便于观察操作结果。
实验3:栈的基本操作
1、实验目的
1)熟悉栈的定义和栈的基本操作。
2)掌握顺序存储栈和链接存储栈的基本运算。
3)加深对栈结构的理解.逐步培养解决实际问题的能力。
2、实验内容
(1)编写栈的基本操作函数(分别用顺序和链接两种方式实现)。
#define STACK_INIT_SIZE 100 //栈内存的初始分配量,以sizeof(ElemType)为单位
#define STACKINCREMENT 10 //栈内存的分配增量,以sizeof(ElemType)为单位
typedef struct {
SElemType *base; //存储空间的基址,数据元素的数据类型约定为SElemType
SElemType * top; //表示栈顶,如果top==base,表示空栈
int stacksize; //当前分配的存储容量,以sizeof(ElemType) 为单位
} SqStack
} SqStack
①进栈函数 Status Push(SqStack *S, SElemType e)
②出栈函数 Status Pop(SqStack *S,SElemType *e)
③输出栈元素 OutputStack(SqStack *S)
(2)调用上述函数实现下列操作,操作步骤如下。
①调用进栈函数建立一个栈。
②读取栈顶元素。
③从栈中删除元素。
④输出栈中的所有元素。
注意 每完成一个步骤就必须及时输出栈中元素,以便观察操作结果
实验4 队列的基本操作
1、实验目的
1)掌握链接存储队列的进队和出队等基本操作。
2)掌握环行队列的进队和出队等基本操作。
3)加深对队列结构的理解,逐步培养解决实际问题的编程能力。
2、实验内容
(1)编写链接队列的基本操作函数。
typedef struct QNode {
QElemType data;
struct QNode *next;
} QNode, *QueuePtr;
typedef struct {
QueuePtr front; // 队头指针
QueuePtr rear; // 队尾指针
} LinkQueue;
①进队操作 EnQueue(LinkQueue *Q, QElemType e)
②出队操作,队空DeQueue(LinkQueue *Q, QElemType *e)
③输出队列中元素 0utputQueue(LinkQueue Q)
(2)c语言listinsert函数调用上述函数实现下列操作,操作步骤如下。
①调用进队函数建立一个队列。
②读取队列中的第一个元素。
③从队列中删除元素。
④输出队列中的所有元素。
注意 每完成一个步骤就必须及时输出队列中元素,以便观察操作结果。
(3)编写环型队列的基本操作函数。
#define QueueSize 100
typedef Struct{
int front;
int rear;
QElemType *base
}sqQueue;
①进队操作,返回1为队满 EnQueue(SqQueue *Q, QElemType e)
②出队操作,返回1为队空 DeQueue(SqQueue *Q, QElemType *e)
③输出队列中元素 outPutQMeue(SqQueue Q)
(4)调用上述函数实现下列操作,操作步骤如下:
①调用进队函数建立一个队列。
②读取队列中的第一个元素。
③从队列中删除元素。
④输出队列中的所有元素。
注意 每完成一个步骤就必须及时输出队列中元素,以便观察操作结果。
实验5 二叉树
1、实验目的
1) 掌握二叉树链表的结构的建立过程。
2)掌握用递归方法实现二叉树的遍历。
3)加深对二叉树的理解,逐步培养解决实际问题的编程能力。
2、实验内容
(1)编写二叉树的基本操作函数。
Typedef struct BiTNode
{ TelemType data;
struct BiTNode *lchild,*rchild;
} BiTNode,*BiTree;
{ TelemType data;
struct BiTNode *lchild,*rchild;
} BiTNode,*BiTree;
①创建一棵二叉树CreateBiTree(BiTree *T);
②先序遍历,递归方法 re_PreOrder(BiTree * tree )
③中序遍历,递归方法 re_MidOrder(BiTree * tree )
④后序遍历,递归方法 re_PostOrder(BiTree * tree )
(2)调用上述函数实现下列操作。
用递归方法分别先序、中序和后序遍历二叉树;
注意 要求动态显示二叉树的建立过程。
实验6 图的基本操作
1. 实验目的
1)掌握图的邻接矩阵、邻接表的表示方法。
2)掌握建立图的邻接矩阵的算法。
3)掌握建立图的邻接表的算法。
4)加深对图的理解,逐步培养解决实际问题的编程能力。
2. 实验内容
(1)编写图基本操作函数。
①建立图的邻接表,邻接矩阵Create_Graph(LGraph lg. MGraph mg )
②邻接表表示的图的递归深度优先遍历 LDFS( LGraph g, int i )
③邻接矩阵表示的图的递归深度优先遍历MDFS( MGraph g,int i, int vn )
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论