(C语言)数据结构中栈的使用
顺序栈
- (1)进栈操作:s->top++; s->data[s->top] = x;
- (2)出栈操作:x = s->data[s->top]; s->top–。
- (3)空栈时:s->top等于-1。
- (4)栈满时:s->top等于MAXSIZE-1
栈结构体类型的定义
typedef struct
{
datatype data[MAXSIZE];
int top;
}SeqStack;
其相关的算法
- 算法3.1-置空栈:首先建立栈空间,然后初始化栈顶指针。
SeqStack *Init_SeqStack()
{
SeqStack *s;
s=(SeqStack*)malloc(sizeof(SeqStack));
s->top= -1;
return s;
}
- 算法3.2-判空栈
int Empty_SeqStack(SeqStack *s)
{
if(s->top==-1)
return 1;
else
return 0;
}
算法3.3-入栈
int Push_SeqStack (SeqStack *s, datatype x)
{
if(s->top==MAXSIZE-1)
return 0;
else
{
s->top++;
s->data[s->top]=x;
return 1;
}
}
- 算法3.4-出栈
int Pop_SeqStack (SeqStack *s, datatype *x)
{
if(Empty_SeqStack(s))
return 0;
else
{
*x=s->data[s->top];
s->top--;
return 1;
}
}
算法3.5-取栈顶元素
datatype Top_SeqStack(SeqStack *s)
{
if(Empty_SeqStack(s))
return 0;
else
return (s->data[s->top]);
}
链式栈
链式栈的结构体类型
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}StackNode,*LinkStack;
其相关的算法
- 算法3.6-置空栈
LinkStack Init_LinkStack()
{
return NULL;
}
- 算法3.7-判栈空
int Empty_LinkStack (LinkStack top)
{
if(top==NULL)
return 1;
else
return 0;
}
- 算法3.8-入栈
LinkStack Push_LinkStack (LinkStack top, datatype x)
{
StackNode *s;
s=(StackNode*)malloc(sizeof(StackNode));
s->data=x;
s->next=top;
top=s;
return top;
}
算法3.9-出栈
LinkStack Pop_LinkStack(LinkStack top, datatype *x)
{
StackNode *p;
if (top == NULL)
return NULL;
else
{
*x=top->data;
p=top;
top=top->next;
free(p);
return top;
}
}