函数运算算法合集03
- 顺序栈的结构体
- 顺序栈的基本运算的实现
- 1. 初始化栈
- 2. 销毁栈
- 3. 判断栈是否为空
- 4. 进栈
- 5. 出栈
- 6. 取栈顶元素
- 链栈的结构体
- 链栈的基本运算的实现
- 1. 初始化栈
- 2. 销毁栈
- 3. 判断是否为空
- 4. 进栈
- 5. 出栈
- 6. 取栈顶元素
注:
本篇文章的概念合集
数据结构的概念大合集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 = pp = 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;
}