函数运算算法合集03
注:
本篇文章的概念合集
数据结构的概念大合集03(栈)
顺序栈的结构体
//顺序栈的结构体
typedef struct{
ElemType data[MaxSize];
int top;
}SqStack;
顺序栈的基本运算的实现
1. 初始化栈
//初始化栈
void InitStack(SqStack *s)
{
s = (SqStack*)malloc(sizeof(SqStack));
s->top = -1;
}
2. 销毁栈
//销毁栈
void DestroyStack(SqStack *s)
{
free(s);
}
3. 判断栈是否为空
//判断栈是否为空
bool StackEmpty(SqStack *s)
{
return (s->top == -1);
}
4. 进栈
//进栈
bool Push(SqStack *s,ElemType e){
if(s->top == MaxSize){
return false;
}
s->top++;
s->data[s->top] = e;
return true;
}
5. 出栈
//出栈
bool Pop(SqStack *s,ElemType *e){
if(s->top == -1){
return false;
}
e = s->data[s->top];
s->top--;
return true;
}
6. 取栈顶元素
//取栈顶元素
bool GetTop(SqStack *s, ElemType *e){
if(s->top == -1){
return false;
}
e = s->data[s->top];
return true;
}
链栈的结构体
//链栈的结构体
typedef struct linknode
{
ElemType data;
struct linknode *next;
} LinkNode;
链栈的基本运算的实现
1. 初始化栈
//初始化栈
void InitStack(LinkNode *s)
{
s = (LinkNode *)malloc(sizeof(LinkNode));
s->next = NULL;
}
2. 销毁栈
//销毁栈
void DestroyStack(LinkNode *s){
LinkNode * pre = s,*p = s->next;
while(p != NULL){
free(pre);
pre = p
p = pre->next;
}
free(pre);
}
3. 判断是否为空
//判断是否为空
bool stackEmpty(LinkNode *s)
{
return(s->next == NULL);
}
4. 进栈
//进栈
bool Push(LinkNode *s, ElemType e)
{
LinkNode *p;
p = (LinkNode *)malloc(sizeof(LinkNode));
p->data = e;
p->next = s->next;
s->next = p;
return true;
}
5. 出栈
//出栈
bool Pop(LinkNode *s,ElemType *e)
{
LinkNode *p;
if(s->next == NULL)
{
return false;
}
p = s->next;
e = p->next;
s->next = p->next;
free(p);
return true;
}
6. 取栈顶元素
//取栈顶元素
bool GetTop(LinkNode *s,ElemType *e)
{
if(s->next == NULL)
{
return false;
}
e = s->next->data;
return true;
}