当前位置:
文档之家› 用顺序结构表示栈并实现栈地各种基本操作
用顺序结构表示栈并实现栈地各种基本操作
}
/*入栈*/
void pushLstack(LinkStack * s, Elemtype x)
{ StackNode * p;
p=(StackNode *)malloc(sizeof(StackNode)); //建立一个节点。
p_>data=x;
p->next=s->top;//由于是在栈顶pushLstack,所以要指向栈顶。
{ ElemType stack[MAXNUM];
int top;
}SqStack;
/*初始化顺序栈*/
void InitStack(SqStack *p)
{ if(!p)
printf("Eorror");
p_>top=_1;
}
/*入栈*/
void Push(SqStack *p,ElemType x)
}LinkStack;
/*初始化链栈*/
void lnitStack(LinkStack * s)
{ s->top=NULL;
printf("\n已经初始化链栈!\n");
}
/*链栈置空*/
void setEmpty(LinkStack * s)
{ s->top=NULL;
printf("\n链栈被置空!\n");
(2) 若要记录栈中元素个数,可将元素个数属性放在LinkStack类型中定义。
(3)链栈中的结点是动态分配的,所以可以不考虑上溢。
【实现提示】
typedef int Elemtype;
typedef struct stacknode {
Elemtype data;
stacknode * next;
\n");
printf("\n
5
置空顺序栈
\n");
printf("\n
6
结束程序运行
\n");
printf("\n\n");
printf("请输入您的选择(1,2, 3, 4, 5,6)");
scanf("%d", &cord);
printf("\n");
switch(cord)
{ case 1:
注意:
(1)顺序栈中元素用向量存放
(2)栈底位置是固定不变的,可设置在向量两端的任意一个端点
(3) 栈顶位置是随着进栈和退栈操作而变化的,用一个整型量top(通常称top为栈顶指针)来指示 当前栈顶位置
【实现提示】
/*定义顺序栈的存储结构*/
typedef struct {
ElemType stack[MAXNUM];
栈的顺序表示和实现
2.2
2.2.1
(1)掌握栈的顺序表示和实现
(2)掌握栈的链式表示和实现
(3)掌握队列的顺序表示和实现
(4)掌握队列的链式表示和实现
2.2.2
实验一:栈的顺序表示和实现
【实验内容与要求】
编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:
(1)初始化顺序栈
int cord;
do{ printf("\n");
printf("第一次使用必须初始化!\n");
printf("\n");
printf("\n
主菜单
\n"
printf("\n
1
初始化链栈
\n");
printf("\n
2
入栈
\n");
printf("\n
3
出栈
\n");
printf("\n
4
取栈顶元素
(2)插入元素
(3)删除栈顶元素
(4)取栈顶元素
(5)遍历顺序栈
(6)置空顺序栈
【知识要点】
栈的顺序存储结构简称为顺序栈,它是运算受限的顺序表。
对于顺序栈,入栈时,首先判断栈是否为满,栈满的条件为:p->top= =MAXNUM-1,栈满时,不能
入栈;否则岀现空间溢岀,引起错误,这种现象称为上溢。
岀栈和读栈顶元素操作,先判栈是否为空,为空时不能操作,否则产生错误。通常栈空作为一种控制转 移的条件。
#include "malloc.h"
#include "stdlib.h"
typedef int Elemtype;
typedef struct stacknode {
Elemtype data;
stacknode * next;
}StackNode;
typedef struct {
stacknode * top; //栈顶指针
实验二:栈的链式表示和实现
【实验内容与要求】
编写一个程序实现链栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:
(1)初始化链栈
(2)链栈置空
(3)入栈
(4)出栈
(5)取栈顶元素
(6)遍历链栈
【知识要点】
链栈是没有附加头结点的运算受限的单链表。栈顶指针就是链表的头指针。
注意:
(1)LinkStack结构类型的定义可以方便地在函数体中修改top指针本身
s->top=NULL;}
/*链栈置空函数*/
void setEmpty(LinkStack * s)
{ s->top=NULL;}
/*入栈函数*/
void pushLstack(LinkStack * s, Elemtype x)
{ p=(StackNode *)malloc(sizeof(StackNode)); //建立一个节点。
}
/*遍历链栈*/
void Disp(LinkStack * s)
{ printf("\n链栈中的数据为:\n");
printf("=======================================\n"); StackNode * p;
p=s->top;
while (p!=NULL)
{ printf("%d\n",p->data);
printf("\n");
for(i=p_>top;i>=0;i__)
printf(”第%d个数据元素是:%6d\n",i,p->stack[i]);
}
/*置空顺序栈*/
void setEmpty(SqStack *p)
{
p->top= -1;
}
/*主函数*/
main()
{ SqStack *q;
int y,cord;ElemType a;
{ q=(SqStack*)malloc(sizeof(SqStack));
InitStack(q);
OutStack(q);
}break;
case 2:
{ printf("请输入要插入的数据元素:a=");
scanf("%d", &a);
Push(q,a);
OutStack(q);
}break;
case 3:
s->top=p;//插入
}
/*出栈*/
Elemtype popLstack(LinkStack * s)
{ Elemtype x;
StackNode * p;
p=s->top;//指向栈顶
if (s->top ==0)
{ printf("\n栈空,不能出栈!\n");
exit(-1);
}
x=p->data;
/*置空顺பைடு நூலகம்栈函数*/
void setEmpty(SqStack *p)
{ p->top= -1;}
【参考程序】
#include<stdio.h>
#include<stdlib.h>
#define MAXNUM 20
#define ElemType int
/*定义顺序栈的存储结构*/
typedef struct
p=p->next;
} printf("=======================================\n");
}
void main()
{printf("=================链栈操作==========
int i,m,n,a;
LinkStack * s;
s=(LinkStack *)malloc(sizeof(LinkStack));
do{
printf("\n");
printf("第一次使用必须初始化!\n");
printf("\n");
printf("\n
主菜单
\n"
printf("\n
1
初始化顺序栈
\n");
printf("\n
2
插入一个元素
\n");
printf("\n
3
删除栈顶元素
\n");
printf("\n
4
取栈顶元素
int top;
}SqStack;
/*初始化顺序栈函数*/