1、电子科技大学软件技术基础实验报告3电子科技大学 通信与信息工程 学院标 准 实 验 报 告(实验)课程名称 软件技术基础实验 电子科技大学教务处制表电 子 科 技 大 学实 验 报 告一、实验室名称:校公共机房 二、实验项目名称:堆栈和队列程序设计三、实验学时:4学时四、实验原理:使用VS2010等C语言集成开发环境(IDE),在微型计算机上对程序进行编辑、编译、连接与运行。通过上机练习掌握堆栈和链表的建立、插入删除,遍历等方法和过程。五、实验目的:1. 熟练堆栈和链表的概念和基本操作方法。2. 掌握课程平台使用方法。六、实验内容:上机完成所有函数,编程实验,调试运行程序并完成报告。七、实验器
2、材(设备、元器件):硬件要求:普通pc机,1G内存,100G硬盘空间即可。 软件要求:Windows 7,包括C编译器的IDE。八、实验步骤、实验编程与运行结果: 现在列出4个题目的代码:/第一题:#include#include#define elemtype inttypedef struct s_tack int length; int top;stackt;typedef struct stack elemtype data; struct stack *next;stack_t;stack_t *initstack() stack_t *top; top=(stack_t*)mall
3、oc(sizeof(stack_t); top-next=NULL; top-data=0; return top;void display(stack_t *head) stack_t *p; printf(当前链栈的数据元素:n); for(p=head-next;p!=NULL;p=p-next) /top为头结点,不存放数据 printf(%d ,p-data); printf(n);void push(stack_t *top,elemtype x) stack_t *p; p=(stack_t*)malloc(sizeof(stack_t); p-data=x; p-next=to
4、p-next; top-next=p;void pop(stack_t *top) stack_t *t,*x; printf(出栈元素:%dn,top-next-data); x=top-next; t=x; top-next=top-next-next; free(t);int main() stack_t *top=NULL; int t; top=initstack(); while(1) printf(请输入新的链栈元素:); scanf(%d,&t); if(t=0) break; push(top,t); display(top); pop(top); display(top);
5、 pop(top); display(top);/第二题#include#include#define N 20typedef struct int dataN; int front,rear;queue_type;void create(queue_type *s) s-data0=2; s-data1=3; s-data2=-4; s-data3=6; s-data4=-5; s-data5=8; s-data6=-9; s-data7=7; s-data8=-10; s-data9=20; s-front=0; s-rear=10;void enqueue(queue_type *q,i
6、nt a) if(q-rear)+1)%N=q-front) printf(队列已满); else q-rear=(q-rear+1)%N; q-dataq-rear-1=a; int dequeue(queue_type *q) if(q-front=q-rear) printf(队列为空); else q-front=(q-front+1)%N; return(q-dataq-front-1); void show(queue_type *q,int a,int b) int i,flag=0; printf(n队列元素:n); if(a=b) flag=1; for(i=a;idatai
7、); printf(n);void aa(queue_type *q) int dequeue(queue_type *q); int length; length=(q-rear)-(q-front); for(;length0;length-) if(q-dataq-frontfront=(q-front+1)%N; printf(n负数出队:%d,q-dataq-front-1); else printf(n正数插入队尾:%d,q-dataq-front); q-front=(q-front+1)%N; q-rear=q-rear+1; q-dataq-rear-1=q-dataq-fr
8、ont-1; int main() int a; queue_type t; create(&t); show(&t,t.front,t.rear); printf(n执行出队操作,出队元素:%dn,dequeue(&t); show(&t,t.front,t.rear); printf(n执行入队操作,请输入入队元素:); scanf(%d,&a); enqueue(&t,a); show(&t,t.front,t.rear); printf(n执行aa函数:); aa(&t); show(&t,t.front,t.rear);/第三题#include#include#define elem
9、type int#define maxnum 100typedef struct stack elemtype datamaxnum; int top0; int top1; int length0; int length1;stack_type;void push(stack_type *ss,elemtype x,int flag) int i; if(flag=0) for(i=ss-length0+1;i=0;i-) ss-datai=ss-datai-1; ss-data0=x; ss-length0+; else for(i=maxnum-ss-length1;idatai-1=s
10、s-datai; ss-datamaxnum-1=x; ss-length1+; void pop(stack_type *ss,int flag) int i,j; if(flag=0) for(i=0;ilength0-1);i+) ss-datai=ss-datai+1; ss-length0-; else j=ss-length1; for(i=maxnum-1;j1;j-,i-) ss-datai=ss-datai-1; ss-length1-; void show(stack_type *ss,int flag) int i; if(flag=0) printf(0号链表如下:n)
11、; for(i=0;ilength0;i+) printf( %d ,ss-datai); printf(n); else printf(1号链表如下:n); for(i=maxnum;i(maxnum-ss-length1);i-) printf( %d ,ss-datai-1); printf(n); int main() stack_type s; int t,flag,i; s.length0=0; s.length1=0; s.top0=0; s.top1=99; while(1) printf(请输入新的栈元素:); scanf(%d,&t); if(t=0) break; pri
12、ntf(请选择操作的栈:); scanf(%d,&flag); push(&s,t,flag); show(&s,0);show(&s,1); printf(分别弹出每个栈一次,结果如下:n); pop(&s,0);pop(&s,1); show(&s,0);show(&s,1);/第四题#include#include#define N 10typedef struct int dataN; int front,rear; int tag; /tag=1,满;tag=0,不满queue_type;void create(queue_type *s) s-data0=2; s-data1=3;
13、 s-data2=-4; s-data3=6; s-data4=-5; s-data5=8; s-data6=-9; s-data7=7; s-data8=-10; s-data9=20; s-front=0; s-rear=9; s-tag=1;void enqueue(queue_type *q,int a) if(q-tag=0) if(q-rear-q-front+1)%N=9) q-tag=1; q-rear=(q-rear+1)%N; q-dataq-rear=a; else printf(队满,无法入队);int dequeue(queue_type *q) q-front=(q
14、-front+1)%N; q-tag=0; return(q-dataq-front-1);void show(queue_type *q,int a,int b,int ta) int i,flag=0; printf(n队列元素:n); if(ab) for(i=a;idatai); if(a=b) for(i=a;idatai); for(i=0;idatai); if(ta=1) printf(n队满n); else printf(n);int main() int a; queue_type t; create(&t); show(&t,t.front,t.rear,t.tag); printf(n执行出队操作,出队元素:%dn,dequeue(&t); show(&t,t.front,t.rear,t.tag); printf(n执行入队操作,请输入入队元素:); scanf(%d,&a); enqueue(&t,a); show(&t,t.front,t.rear,t.tag);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1