实验任务书(8个)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

实验1 顺序表的应用 (2)

实验2 链表的应用 (5)

实验3 栈的应用 (6)

实验4 队列的应用 (7)

实验5 树的应用 (8)

实验6 图的应用 (9)

实验7 图的应用 (10)

实验8 查找与排序 (11)

实验1 顺序表的应用

实验目的

1.熟悉C语言的上机环境,掌握C语言的基本结构。

2.会定义线性表的顺序存储结构。

3.熟悉对顺序表的一些基本操作和具体的函数定义。

4.掌握在线性表的顺序存储结构上的一些其它操作。

实验要求

1.独立完成;

2.程序调试正确,有执行结果。

实验内容

1、基础题:

编写应用程序(填空),实现可以在顺序表中插入任意给定数据类型(定义为抽象数据类型)数据的功能。要求在主函数中定义顺序表并对该顺序表插入若干个整数类型的数据(正整数),对它们求和并输出。请使用动态内存分配的方式申请数组空间,并把主函数设计为一个文件SeqList.cpp,其余函数设计为另一个文件SeqList.h。

请填空完成以下给出的源代码并调试通过。

(1)文件SeqList.h:

typedef struct List{

ElemType *list;

int size;

int MaxSize;

}SeqList;

void InitList(SeqList &L)

{ //初始化线性表

…………

}

void ClearList(SeqList &L)

{ //清除线性表

………………

}

int LengthList(SeqList L)

{ //求线性表长度

………..

}

bool InsertList(SeqList &L, ElemType item, int pos)

{ //按给定条件pos向线性表插入一个元素

…….

}

ElemType GetList(SeqList L, int pos)

{ //在线性表L中求序号为pos的元素,该元素作为函数值返回…………..

}

(2)文件SeqList.cpp:

#include

#include

typedef ElemType;

#define MAXSize 10

#include "SeqList.h"

void main(void)

{

SeqList myList;

int i=1, x, sum=0, n;

InitList ( );

scanf(“%d”, &x);

while ( x!= -1 )

{

if ( InsertList (myList, , i )==0) {

printf("错误!\n");

return ;

}

i++;

scanf(“%d”, &x);

}

n = LengthList (myList);

for (i=1; i<=n; i++)

{

x=GetList(myList, i);

sum = + x;

}

printf("%d\n ", sum);

ClearList(myList);

}

2、提高部分:编写函数bool DeleteElem(SeqList &L, int min, int max)实现从顺序表中删除其值在给定值min和max之间(min < max)的所有元素,要求把该函数添加到文件SeqList.h中,并在主函数文件SeqList.cpp中添加相应语句进行测试。

实验2 链表的应用

实验目的

1.定义单链表的结点类型。

2.熟悉对单链表的一些基本操作和具体的函数定义。

3.通过单链表的定义掌握线性表的链式存储结构的特点。

4.熟悉单链表的应用场合。

实验要求

1.独立完成;

2.程序调试正确,有执行结果。

实验内容

1、基础题:

线性表基本操作的实现(演示单链表的创建、插入、删除和查找等操作),并请将链式存储结构的程序存放在文件link.h(基本操作函数)、l ink.cpp(主函数)中。(要求有简单实例测试算法的正确性)

2、提高题:

编写程序,模拟约瑟夫环(josephus)问题:n个人(编号为1,2,3,……,n (n>0) )按顺时针方向围坐一圈,每人持有一个正整数密码。开始时任意给出两个值:一个为首先报数的人的编号i (0

基本要求:

人数n、每人的正整数密码、首次报数人编号i、初始报数上限值m均由键盘输入。

实验3 栈的应用

实验目的

1.会定义顺序栈和链栈的结点类型。

2.掌握栈的插入和删除结点在操作上的特点。

3.熟悉对栈的一些基本操作和具体的函数定义。

实验要求

1.独立完成;

2.程序调试正确,有执行结果。

实验内容

1、基础题:

设栈采用顺序存储结构(用动态数组),请编写栈的各种基本操作的实现函数,并存放在头文件stack.h中。同时建立一个验证操作实现的主函数文件stack.cpp,编译并调试程序,直到正确运行。

提示:

⑴栈的动态数组顺序存储结构可定义如下:

struct Stack {

ElemType *stack ; // 存栈元素

int top; // 栈顶指示器

int MaxSize; // 栈的最大长度

};

⑵栈的基本操作可包括:

①void InitStack (Stack &S); //构造一个空栈S

②int EmptyStack (Stack S); //若栈S为空栈返回1,否则返回0

③void Push(Stack &S, ElemType item); //元素item进栈

④ElemType Pop(Stack &S); //栈S的栈顶元素出栈并返回

⑤ElemType Peek(Stack S); //取栈S的当前栈顶元素并返回

⑥void ClearStack (Stack &S); //清除栈s,使成为空栈

2、应用题:

写一函数,判断给定的字符串是否中心对称。如字符串“abcba”、“abccba”均为中心对称,字符串“abcdba”不中心对称。要求利用stack.h中已实现的有关栈的基本操作函数来实现。请把该函数添加到文件stack.cpp中的主函数前,并在主函数中添加相应语句进行测试。函数原型如下:

int IsReverse(char *s) //判断字符串S是否中心对称,是返回1,否则返回0

相关文档
最新文档