栈的定义及基本操作

  • 格式:docx
  • 大小:8.21 KB
  • 文档页数:5

下载文档原格式

  / 5
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
p->data=x;
p->next=S->top;
S->top=p;
return 1;
} else
return 0;
}
int Pop_LinkStack(PLinkStack S, int *x)
{
PLinkStack p;
if (Empty_LinkStack (S)=l)
return 0;
else {
判断空:Empty.StackO若栈空,则返回为1,否则返回0
入栈:Push_Stack(S, x)初始条件:栈S己经存在 操作结果:在栈S的顶部插入一 个元素x,这样x就、成为新的栈顶元素。
出栈:Pop_Stack(S, &x)初始条件:栈S存在且不为空操作结果:栈S的顶部元素
从栈顶删除,保存在变量x中
return 1;
}
}
int GetTop_SeqStack(PSeqStack S)
{
if(Empty_SeqStack(S) ==1){
printf (''Empty Stack!\n/z);
return T;
}
else
return S->data[S->top];
}
int Destory_SeqStack(PSeqStack *S)
{
if(*S){
free(*S);
*S=NULL;
return 1;
}
return 0;
}
int main ()
{
PSeqStack s;
int x二0;
s=Init_Se(iStaห้องสมุดไป่ตู้k();
Push SeqStack(s, 1);
Push_SeqStack(s, 2);
Push SeqStack(s, 3);
{
if(S->top=NULL)
return 1;
else return 0;
)
int Push_LinkStack(PLinkStack S, int x)
PLinkStackNode p;
p=(PLinkStackNode)malloc(sizeof(LinkStackNode)); if(p!=NULL){
将data和top封装在一个结构中
#define MAXSIZE100
typedef{
DataType data[STACKSIZE];
int top;
/SeqStack, *PSeqStack:
下面用一个实例介绍栈的一些基本操作(经过测试):
#include<stdio. h>
#include<stdlib・ h>
#include<malloc・ h>
#define STACKSIZE 100
typedef struct{
int data[STACKSIZE];
int top;
/SeqStack, *PSeqStack;
PSeqStack Init_SeqStack()
{
PSeqStack S;
S= (PSeqStack)malloc(sizeof(SeqStack));
取栈顶元素:GetTop_Stack(S)初始条件:栈s存在且不为空 操作结果:返回栈S的栈 顶元素,且原栈的结构不会变化
销毁栈:Destory_Stack(S)初始条件:栈S已经存在操作结果:销毁一个已经存
在的栈
栈的存储方式:(1)顺序存储(2)链式存储
下面我分别介绍这两种的实现:
顺序存储
顺序存储中用int data [STACKSIZE]来存放所有的入栈元素,栈底的位置可以设置固 疋在数组的任意一端,栈顶指示实际的栈顶元素位垃,它是随着插入和删除是动态变化的, 用int top变量来指示栈顶的位置
)LinkStack, *PLinkStack;
PIJnkStack I nit LinkStackO
{
PLinkStack s;
s二(PI.inkStack)mal loc(sizeof (LinkStack));
if(s)
s->top=NULL;
return s;
)
int KmptyJJnkStack(PLinkStack S)
Push SeqStack(s, 4);
printf (,zTop:%d ", GetTop_SeqStack (s));
Destory_SeqStack (&s);
return 1;
)
链式存储
栈的链式存储般用单链衣來实现,实现代码如下:
#include<stdio. h>
#include<stdlib. h>
栈的左义及基本操作
在数据结构中,栈是限制在表的一端进行插入和删除的线性表。在线性表中允许插入、删除 的这一端称为栈顶,栈顶的当前位置是动态变化的,这样我们只能在栈顶对栈进行操作;不 允许插入和删除的另一端称为栈底,栈底是固左不变得,当表中没有元素时称为空栈。
对栈的常用操作有:
栈初始化:InijStackO初始条件:栈不存在操作结果:构造了一个空栈
return 0;
else {
S~>top++;
S->data[S->top]二x;
return 1;
}
}
int Pop_SeqStack(PSeqStack S,int *x)
{
if(Empty_SeqStack(S)==1)
return 0;
else {
*x=S->dataiS->top];
S->top―;
P二s;
*x=S->top->data;
S->top=S->top->next;
free(p);
return 1;
}
}
int GetTop_LinkStack(PLinkStack S)
{
if (Empty_LinkStack(S)=l) {
printf ('"Empty Stack!\n^);
if(S!=NULL)
S_>top二-1;
return S;
}
int Empty_SeqStack(PSeqStack S)
if (S->top==-l)
return 1:
else return 0;
}
int Push_SeqStack(PSeqStack S, int x)
{
if(S->top==STACKSIZE-l)
#includc<ma11oc. h>
★define STACKSIZE 100
typedef struct LinkStack{
int data;
struct LinkStack *next;
(LinkStackNode, *PLinkStackNode;
typedef struct {
PLinkStackNode top;