数据结构栈和队列实验报告C语言源码(程序在C-Free下通过) .doc
文本预览下载声明
课程名称
实验项目名称
(一)实验目的和要求;
熟练掌握栈及队列基本操作的实现
(二)实验主要内容;
建立栈并进行元素(8,9,5,4)入栈,实现链栈的建立及入栈的基本操作;
实现元素(9,5)的出栈,实现链栈的出栈的操作;
建立链队列,并实现元素(4,5,7,6,8)入队,实现链队列的建立,和入队的基本操作;
实现元素(4,5,7,6,8)出队,实现链队列的出队的基本操作
(三)主要仪器设备
计算机,VC++高级程序语言
(四)实验原理
栈的修改时按照先进后出的原则进行的,试验中用到构造空栈,及入栈出栈操作。队列是一种先进先出的线性表,只允许在表的一端插入,而在另一端删除元素,试验中构造队并且入队出队。
(五)实验步骤及调试分析;
根据课本基本操作写好源程序,基本操作在书本中已经给出,写出主函数,调试分析程序,找出错误,并修改后程序能够运行并得出正确输出。试验中,有些小错误经常犯,比如符号,函数声明等。
(六)实验结果及分析;
实验结果如下:
能够按照实验要求得出正确结果
(七)附录:源程序
#includestdio.h
#includemalloc.h
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int elemtype;
typedef int status;
typedef struct QNode{
elemtype data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct {
QueuePtr front;
QueuePtr rear;
}LinkQueue;
typedef struct lnode {
elemtype data;
struct lnode *next;
}stacknode, *linkstack;
status initstack(linkstack top) {
top-next = NULL;
}
status isempty(linkstack top) {
if(top-next == NULL) return OK;
return ERROR;
}
status push(linkstack top, elemtype e) {
stacknode *p;
p= (stacknode *)malloc(sizeof(stacknode));
if(p == NULL) return ERROR;
p-data = e;
p-next = top-next;
top-next = p;
return OK;
}
status pop(linkstack top, elemtype *e) {
if(isempty(top)) return ERROR;
stacknode *p = top-next;
*e = p-data;
top-next = p-next;
free(p);
return OK;
}
status shstack(linkstack top){
stacknode *p;
p= (stacknode *)malloc(sizeof(stacknode));
p-next=top-next;
while(p-next!=NULL){
printf(%d ,p-next-data);
p-next=p-next-next;
}
return OK;
}
status initqueue(LinkQueue *q){
(*q).front=(*q).rear=(QueuePtr)malloc(sizeof(QNode));
if (!(*q).front) exit(OVERFLOW);
(*q).front-next=NULL;
return OK;
}
status enqueue(LinkQueue *q,elemtype e){
QueuePtr p=(QueuePtr)malloc(sizeof(QNode));
if(!p) exit(OVERFLOW);
p-data=e;
p-next=NULL;
(*q).rear-next=p;
(*q).rear=p;
return OK;
}
status dequeue(LinkQueue *q,elemtype *e){
if((*q).front==(*q).rear) return ERROR;
QueuePtr p;
p=(
显示全部