上机.docx
《上机.docx》由会员分享,可在线阅读,更多相关《上机.docx(13页珍藏版)》请在冰豆网上搜索。
上机
上机一线性结构的基本操作
一、上机目的
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、对本实验进行时间、空间的复杂度分析。