顺序栈的介绍及实现
1 棧
從數(shù)據(jù)結構角度來講,棧也是線性表,其操作是線性表操作的子集,屬操作受限的線性表。
但從數(shù)據(jù)類型的角度看,它們是和線性表大不相同的重要抽象數(shù)據(jù)類型。
◆ 棧是只準在一端進行插入和刪除操作的線性表,該端稱為棧的頂端。
棧頂(Top):線性表允許插入和刪除的一端
棧底(Bottom):固定的,不允許進行插入和刪除的一端
2 棧的基本操作
從棧頂刪除最后一個元素的操作,稱為出棧。
插入元素到棧頂?shù)牟僮?#xff0c;稱為入棧。
對于向上生成的堆棧:
入棧口訣:堆棧指針top“先壓后加” : S[top++]=x
出棧口訣:堆棧指針top “先減后彈” : e=S[--top]
top==-1 為空則棧空
top==maxsize-1為真則棧滿
3 順序棧代碼實現(xiàn)
#include <stdio.h> #include <stdlib.h> #define MAXSIZE (20)typedef int ElementType; typedef struct SqStack {ElementType data[MAXSIZE];int top; } *Stack;Stack InitStack(void) //初始化棧 {Stack s = (Stack)malloc(sizeof(struct SqStack));s->top = -1;return s; }void Push(Stack s, ElementType e) //壓棧,將元素e插入到棧S中,作為S的新棧頂 {if (s->top == MAXSIZE - 1) { //棧滿return;}s->top++;s->data[s->top] = e; }void Pop(Stack s, ElementType *e) //出棧,若棧S不為空,則刪除棧頂元素 {if (s->top == -1) { //棧空return;}*e = s->data[s->top];s->top--; }void PrtStack(Stack s) {for (int i = 0; i <= s->top; i++) {printf("%d ", s->data[i]);}printf("\n"); }int main(void) {ElementType e;Stack s = InitStack();PrtStack(s);printf("please input a element :");scanf("%d", &e);Push(s, e);PrtStack(s);Pop(s, &e);printf("Pop a element : %d", e);return 0; }總結
- 上一篇: 【ACL2020】Relabel the
- 下一篇: 图的知识点总结-数据结构