上机.docx

上传人:b****8 文档编号:27652681 上传时间:2023-07-03 格式:DOCX 页数:13 大小:17.77KB
下载 相关 举报
上机.docx_第1页
第1页 / 共13页
上机.docx_第2页
第2页 / 共13页
上机.docx_第3页
第3页 / 共13页
上机.docx_第4页
第4页 / 共13页
上机.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

上机.docx

《上机.docx》由会员分享,可在线阅读,更多相关《上机.docx(13页珍藏版)》请在冰豆网上搜索。

上机.docx

上机

上机一线性结构的基本操作

一、上机目的

1、掌握线性结构中线性表、栈、队列的存储结构形式及其描述和基本运算的实现。

3、熟练掌握动态链表结构及有关算法的设计。

4、掌握线性表、栈、队列的基本操作:

插入、删除、查找等运算在顺序存储结构和链接存储结构上的算法思想和实现。

二、上机要求

1、认真阅读和掌握本上机的程序,在各模块的后面写出相应的注释。

2、上机运行本程序。

3、保存和打印出程序的运行结果,并结合程序进行分析。

4、按照你对线性表的操作需要,再写出线性表合并的程序并运行,打印出文件清单和运行结果

三、上机内容

程序:

顺序队列基本操作的实现

//4.cpp:

Definestheentrypointfortheconsoleapplication.

//

#include"stdafx.h"

#include

#include

#include

#defineMSIZE30

typedefstruct

{

intdata[MSIZE];

intfront;

intrear;

}Queue;

voidInitQueue(Queue*Q)//构造一个空队列Q

{

Q->front=Q->rear=0;

}

voidEnQueue(Queue*Q,inte)//入队

{

if((Q->rear+1)%MSIZE==Q->front)

printf("队列已满");

else{

Q->data[Q->rear]=e;

Q->rear=(Q->rear+1)%MSIZE;

}

}

voidDeleteQueue(Queue*Q,int*e)//出队

{

if(Q->front==Q->rear)

return;

*e=Q->data[Q->front];

Q->front=(Q->front+1)%MSIZE;

}

voidQueuePrint(QueueQ)

{

inti,j,p,e;

j=(Q.rear-Q.front+MSIZE)%MSIZE;

p=Q.front;

if(Q.front==Q.rear)

printf("队列为空。

\n");

elseif((Q.rear+1)%MSIZE==Q.front)

printf("队列满。

\n");

elseif((Q.front+1)%MSIZE!

=Q.front)

printf("队列非空非满。

\n");

for(i=1;i<=j;i++){

e=Q.data[p];

p=(p+1)%MSIZE;

printf("第%d元素的值是=%d\n",i,e);}

}

 

intmenu_select()/*系统菜单*/

{

inta;

printf("\n*_*按任意键清屏并返回主菜单!

*_*\n");

getch();

system("cls");

printf("********************MENU*********************\n");

printf("1.........建立空队列\n");

printf("2.........入队列\n");

printf("3.........出队列\n");

printf("4.........输出队列\n");

printf("5.........退出\n");

printf("**********************************************\n");

do{

printf("请输入你的选择(1~5):

");

scanf("%d",&a);}

while(a<1||a>5);

returna;

}

voidmain()

{

intx;

intchoice=0;

QueueQ;

inte;

for(;;)

{

switch(menu_select())

{case1:

InitQueue(&Q);

printf("初始化队列完毕.\n");

break;

case2:

printf("输入入队元素:

");

scanf("%d",&x);

EnQueue(&Q,x);

break;

case3:

DeleteQueue(&Q,&e);

printf("出队元素:

%d\n",e);

break;

case4:

QueuePrint(Q);

break;

case5:

exit(0);

}

}

}

程序:

链栈基本操作的实现

//5.cpp:

Definestheentrypointfortheconsoleapplication.

//

#include"stdafx.h"

#include

#include

#include

#include"iostream.h"

#include

typedefintStackDataType;//StackDataType定义为整数类型

//定义链栈节点

typedefstructstacknode{

StackDataTypedata;

structstacknode*next;

}stacknode;

typedefstructstack{

stacknode*top;

}LinkStack;

//--1.链队初始化

//------------------------------------------------

voidInitStack(LinkStack*s)

//构造一个空栈

{

s->top=NULL;

}

//--2.判断栈空

boolstackEmpty(LinkStack&s){

return(s.top==NULL);

}

//--3.取栈顶元素

voidGetTop(LinkStack*s,StackDataTypee){

//若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR*/

//inte;

if(!

s->top)

printf("空队列\n");

else{e=s->top->data;

printf("栈顶%d:

\n",e);}

}

 

//--4.入栈

voidpush(LinkStack*s,StackDataTypee){

//插入元素e为新的栈顶元

stacknode*q=(stacknode*)malloc(sizeof(stacknode));

q->data=e;

q->next=s->top;

s->top=q;

}

 

//--5.出栈

voidpop(LinkStack*s,StackDataTypee){

//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR

stacknode*q=s->top;

if(s->top==NULL)

printf("空栈\n");

e=q->data;

printf("栈顶元素:

%d\n",e);

s->top=q->next;

free(q);

}

 

voidstackPrint(LinkStack&s)

{

stacknode*p;

inte,i=1;

p=s.top;

if(p==NULL)

printf("栈为空。

\n");

while(p!

=NULL){

e=p->data;

p=p->next;

printf("第%d元素的值是=%d\n",i,e);

i++;}

}

 

intmenu_select()/*系统菜单*/

{

inta;

printf("\n*_*按任意键清屏并返回主菜单!

*_*\n");

getch();

system("cls");

printf("********************MENU*********************\n");

printf("1.........建立空栈\n");

printf("2.........入栈\n");

printf("3.........出栈\n");

printf("4.........取栈顶元素\n");

//printf("5.........销毁队列,释放内存\n");

printf("6.........输出栈\n");

printf("7.........退出\n");

printf("**********************************************\n");

do{

printf("请输入你的选择(1~7):

");

scanf("%d",&a);}

while(a<1||a>7);

returna;

}

voidmain(){

intx;

intchoice=0;

LinkStacks;

inte;

for(;;)

{

switch(menu_select())

{

case1:

InitStack(&s);

printf("初始化栈完毕.\n");

break;

case2:

printf("输入入栈元素:

");

scanf("%d",&x);

push(&s,x);break;

case3:

pop(&s,e);//printf("出栈元素:

%d\n",e);

break;

case4:

GetTop(&s,e);

//printf("栈顶元素:

%d\n",e);

break;

//case5:

pop(s);

//break;

case6:

stackPrint(s);

break;

case7:

exit(0);

}

}

}

四、要求实现

1、线性表、栈、队列各有什么特点和优点?

2、顺序表、链表、顺序栈、链栈的实现

上机二栈的基本操作

一、上机目的

1、掌握栈的思想及其存储实现,掌握顺序栈的类型定义方法。

2、明确栈是特殊的线性表。

3、掌握栈的常见算法的程序实现:

初始化栈、判栈为空、出栈、入栈等运算。

4、掌握顺序栈的简单应用。

5、理解栈的算法思想,能够根据实际情况选择合适的存储结构。

二、上机要求

1、认真阅读和掌握本实验的算法。

2、上机将本算法实现。

3、保存和打印出程序的运行结果,并结合程序进行分析。

三、上机内容

利用栈的基本操作实现将任意一个十进制整数N转化为R进制整数。

要求非负的十进制整数N和R都从键盘输入;转换结果从屏幕输出。

算法为:

1)、定义栈的顺序存取结构

2)、分别定义栈的基本操作(初始化栈、判栈为空、出栈、入栈等)

3)、定义一个函数用来实现上面问题:

十进制整数X和R作为形参

初始化栈

只要X不为0重复做下列动作

 将X%R入栈

  X=X/R

只要栈不为空重复做下列动作

栈顶出栈

输出栈顶元素

四、思考题

1、栈与递归之间有何关系?

2、考虑用链栈实现栈的一些基本运算。

上机三查找和排序

一、上机目的

1、掌握常用的查找和排序的方法,并掌握用高级语言实现查找和排序算法的方法;

2、深刻理解查找和排序的定义及各种查找和排序方法的特点,并能加以灵活应用;

3、了解各种方法的查找和排序过程及其依据的原则,并掌握各种查找和排序方法的时间复杂度的分析方法。

4、能通过查找和排序解决实际问题。

二、上机要求

1、认真掌握本实验的算法。

2、上机将本算法实现。

3、保存和打印出程序的运行结果,并结合程序进行分析。

三、上机内容

为宿舍管理人员编写一个宿舍管理查询软件,程序采用交互工作方式,其流程如下:

开始

建立数据文件

数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、快速等任选一种)

查询菜单:

(用二分查找实现以下操作)

1.按姓名查询

2.按学号查询

3.按房号查询

打印任一查询结果(可以连续操作)

四、思考问题

1、什么叫做稳定排序?

2、对本实验进行时间、空间的复杂度分析。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1