文档介绍:( 规格为 A4 纸或 A3 纸折叠) (用五号宋体和 Times New Roman, A4 纸双面打印) 一、实验目的; 1. 理解队列和栈的顺序存储结构和链式存储结构。通过本实验,熟悉队列、栈的结构特点。 2. 熟悉队列、栈的结构上的操作与算法的实现。二、实验内容; 1. 队列的基本操作和应用。 2. 栈的基本操作和应用。三、实验原理; 队列与栈是一种操作受限制的线性表,在了解线性表的基本原理的基础上,理解与完成此项实验。队列是一种先进先出( FIFO )的线性表,它允许在表的一端(队尾)插入元素(入队) ,而在表的另一端(队头)删除元素(出队)。栈是限定在表尾(栈顶)进行插入或删除操作的线性表。又称为后进先出( LIFO )的线性表。四、实验步骤; 1. 调试下列程序“顺序栈程序一”,掌握顺序栈的算法和实现方法。 2. 调试下列程序“链队列程序二”,掌握链队列的算法和实现方法。 3. 根据顺序栈程序的学****采用栈的链式存储结构,用菜单的形式完成栈的出栈、入栈、取栈顶元素等基本操作。 4. 根据链队列程序的学****采用队列的顺序存储结构,用菜单的形式完成队列的建立,出队,入队等基本操作。五、程序源代码及注释/* 链式栈:采用栈的链式存储结构,用菜单的形式完成栈的入栈,出栈和取栈顶元素。*/ #include<> #include<> /* 链队列: 采用队列的顺序存储结构, 用菜单的形式完成队列的建立,出队入队。*/ #include<> #include<> #define MAXQSIZE 10 typedef struct SNode { int data; struct SNode *next; }SNode,*LinkStack; LinkStack top; LinkStack PushStack(LinkStack top,int x) // 数据元素入栈{ LinkStack s; s=(LinkStack)malloc(sizeof(SNode)); s->data=x; s->next=top; top=s; return top; } LinkStack PopStack(LinkStack top) // 数据元素出栈{ LinkStack p; if(p!=NULL) { p=top; return top; } else printf(" 栈已空的,无法退栈! \n"); return 0; } int GetStackTop(LinkStack top) // 取栈顶元素{ typedef struct{ int base[10]; int front; int rear; }*SqQueue; void InitQueue(SqQueue Q) // 初始化{ Q->front=0; Q->rear=Q->front; } int EnQueue(SqQueue Q) // 数据元素入队{ int e; printf(" 请输入入队元素: "); scanf("%d",&e); if((Q->rear+1)%MAXQSIZE==Q->front) { printf(" 队已满,无法入队。\n"); return 0; } else { Q->base[Q-