数据结构学习-栈

来源:互联网 发布:eclipse怎么编写java 编辑:程序博客网 时间:2024/06/12 01:49

目的

这一系列博客的目的在于复习巩固数据结构的基础知识,为考研面试笔试做准备,所以重在原理,代码实践不是重点。
参考书籍有严蔚敏老师的《数据结构(C语言版)》,《C/C++数据结构与算法速学速用大辞典》

  • 顺序栈
    在pop,push时,注意:
    因为数据实际上是存储在DataType stack数组中,下标从0开始,所以top=0表示空栈,top=i表示栈顶元素存储在stack[i-1]中。
#define StackSize 100typedef int DataType; typedef struct{    DataType stack[StackSize];    int top;}SeqStack;void InitStack(SeqStack *s){    s->top = 0;}int PushStack(SeqStack *s, DataType e){    if(s->top >= StackSize)    {        printf("stack is full!\n");        return 0;    }    else    {        s->stack[s->top] = e;        s->top ++;        return 1;    }}int PopStack(SeqStack *s, DataType *e){    if(s->top == 0)    {        printf("stack is empty!\n");        return 0;    }    else    {        s->top --;        *e = s->stack[s->top];        return 1;    }}
  • 链式栈
    为降低插入删除的时间复杂度,链式栈插入删除都在栈顶指针的位置进行。
typedef DataType int;typedef struct node{    DataType data;    struct node *next;}LStackNode, *LinkStack;void InitStack(LinkStack *top){    if((*top=(LinkStack)malloc(sizeof(LStackNode))) == NULL)        exit(-1);    *top->next = NULL;}int StackEmpty(LinkStack top){    if(top->next == NULL)        return 1;    else        return 0;}int PushStack(LinkStack top, DataType e){    LStackNode *p;    if((p=(LStackNode*)malloc(sizeof(LStackNode))) == NULL)    {        printf("内存分配失败\n");        exit(-1);    }    p->data = e;    p->next = top->next;    top->next = p;    return 1;}
  • 共享栈

  • 表达式求值