1、上机上机一 线性结构的基本操作一、 上机目的1、掌握线性结构中线性表、栈、队列的存储结构形式及其描述和基本运算的实现。3、熟练掌握动态链表结构及有关算法的设计。4、掌握线性表、栈、队列的基本操作:插入、删除、查找等运算在顺序存储结构和链接存储结构上的算法思想和实现。二、 上机要求1、 认真阅读和掌握本上机的程序,在各模块的后面写出相应的注释。2、 上机运行本程序。3、 保存和打印出程序的运行结果,并结合程序进行分析。4、 按照你对线性表的操作需要,再写出线性表合并的程序并运行,打印出文件清单和运行结果三、 上机内容程序:顺序队列基本操作的实现/ 4.cpp : Defines the entr
2、y point for the console application./#include stdafx.h#include #include #include #define MSIZE 30 typedef struct int dataMSIZE; int front; int rear; Queue; void InitQueue (Queue *Q)/构造一个空队列Q Q-front =Q-rear =0; void EnQueue(Queue *Q,int e)/入队 if(Q-rear+1)%MSIZE=Q-front) printf(队列已满); else Q-dataQ-re
3、ar=e; Q-rear=(Q-rear+1)%MSIZE; void DeleteQueue(Queue *Q,int *e)/出队 if(Q-front=Q-rear) return; *e=Q-dataQ-front; Q-front=(Q-front+1)%MSIZE; void QueuePrint(Queue Q) int i,j,p,e; j=(Q.rear-Q.front +MSIZE)%MSIZE; p=Q.front; if(Q.front=Q.rear) printf(队列为空。n); else if(Q.rear+1)%MSIZE=Q.front) printf(队列满
4、。n); else if(Q.front+1)%MSIZE!=Q.front) printf(队列非空非满。n); for(i=1;i=j;i+) e=Q.datap; p=(p+1)%MSIZE; printf(第%d元素的值是=%dn,i,e); int menu_select()/*系统菜单*/ int a; printf(n*_* 按任意键清屏并返回主菜单! *_* n); getch(); system(cls); printf(*MENU*n); printf(1.建立空队列n); printf(2.入队列n); printf(3.出队列n); printf(4.输出队列n); p
5、rintf(5.退出n); printf(*n); do printf(请输入你的选择(15):); scanf(%d,&a); while (a5); return a; void main() int x; int choice=0; Queue Q; int e; for(;) switch(menu_select() case 1:InitQueue(&Q); printf(初始化队列完毕.n); break; case 2:printf( 输入入队元素:); scanf(%d,&x); EnQueue(&Q,x); break; case 3:DeleteQueue(&Q,&e);
6、printf(出队元素:%dn,e); break; case 4:QueuePrint(Q); break; case 5:exit(0); 程序:链栈基本操作的实现/ 5.cpp : Defines the entry point for the console application./#include stdafx.h#include #include #include #include iostream.h #include typedef int StackDataType; /StackDataType 定义为整数类型/定义链栈节点typedef struct stacknode
7、 StackDataType data; struct stacknode *next; stacknode;typedef struct stack stacknode *top; LinkStack; /-1.链队初始化/- void InitStack(LinkStack *s) /构造一个空栈 s-top=NULL; /-2.判断栈空bool stackEmpty(LinkStack &s) return ( s.top=NULL); /-3.取栈顶元素void GetTop (LinkStack *s, StackDataType e) /若栈不空,则用e 返回S的栈顶元素,并返回O
8、K;否则返回ERROR */ int e; if(!s-top) printf(空队列n); else e= s-top-data; printf(栈顶%d:n,e); /-4.入栈void push(LinkStack *s, StackDataType e)/插入元素e为新的栈顶元 stacknode *q=(stacknode*)malloc(sizeof(stacknode); q-data=e; q-next=s-top; s-top=q; /-5.出栈void pop (LinkStack *s, StackDataType e)/若栈不空,则删除S的栈顶元素,用e返回其值,并返回
9、OK;否则返回ERROR stacknode *q=s-top; if(s-top=NULL) printf(空栈n); e=q-data; printf(栈顶元素:%dn,e); s-top=q-next; free(q); void stackPrint(LinkStack &s) stacknode *p; int e,i=1; p = s.top; if(p=NULL) printf(栈为空。n); while(p!=NULL) e=p-data; p=p-next; printf(第%d元素的值是=%dn,i,e); i+; int menu_select()/*系统菜单*/ int
10、 a; 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(请输入你的选择(17):); scanf(%d,&a); while (a7); return a; void main() int x; int choice=0
11、; LinkStack s; int e; for(;) switch(menu_select() case 1:InitStack(&s); printf(初始化栈完毕.n); break; case 2:printf( 输入入栈元素:); scanf(%d,&x); push(&s,x);break; case 3:pop(&s,e);/printf(出栈元素:%dn,e); break; case 4:GetTop(&s,e); /printf(栈顶元素:%dn,e); break; / case 5:pop(s); / break; case 6:stackPrint(s); brea
12、k; case 7:exit(0); 四、要求实现1、线性表、栈、队列各有什么特点和优点?2、顺序表、链表、顺序栈、链栈的实现上机二 栈的基本操作一、 上机目的1、掌握栈的思想及其存储实现,掌握顺序栈的类型定义方法。2、明确栈是特殊的线性表。3、掌握栈的常见算法的程序实现:初始化栈、判栈为空、出栈、入栈等运算。4、掌握顺序栈的简单应用。5、理解栈的算法思想,能够根据实际情况选择合适的存储结构。二、上机要求1、认真阅读和掌握本实验的算法。2、上机将本算法实现。3、保存和打印出程序的运行结果,并结合程序进行分析。三、上机内容利用栈的基本操作实现将任意一个十进制整数N转化为R进制整数。要求非负的十进
13、制整数N和R都从键盘输入;转换结果从屏幕输出。算法为:1)、定义栈的顺序存取结构2)、分别定义栈的基本操作(初始化栈、判栈为空、出栈、入栈等)3)、定义一个函数用来实现上面问题:十进制整数X和R作为形参初始化栈只要不为重复做下列动作 将入栈X=X/R只要栈不为空重复做下列动作栈顶出栈输出栈顶元素四、思考题 1、栈与递归之间有何关系? 2、考虑用链栈实现栈的一些基本运算。上机三 查找和排序一、上机目的1、掌握常用的查找和排序的方法,并掌握用高级语言实现查找和排序算法的方法;2、深刻理解查找和排序的定义及各种查找和排序方法的特点,并能加以灵活应用;3、了解各种方法的查找和排序过程及其依据的原则,并掌握各种查找和排序方法的时间复杂度的分析方法。4、能通过查找和排序解决实际问题。二、上机要求1、认真掌握本实验的算法。2、上机将本算法实现。3、保存和打印出程序的运行结果,并结合程序进行分析。三、上机内容为宿舍管理人员编写一个宿舍管理查询软件, 程序采用交互工作方式,其流程如下:开 始 建立数据文件数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、快速等任选一种)查询菜单: (用二分查找实现以下操作)1.按姓名查询 2.按学号查询 3.按房号查询打印任一查询结果(可以连续操作)四、 思考问题1、什么叫做稳定排序?2、对本实验进行时间、空间的复杂度分析。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1