作者: _涼城 | 来源:发表于2020-04-11 15:34 被阅读0次
栈的概念

​ 栈是是一种只能在一端进行插入和删除操作的特殊线性结构,允许进行插入和删除操作的一端为栈顶,另外一段为栈底

​ 向一个栈插入新元素又称作进栈入栈压栈,是把新元素放到栈顶元素的上面。删除元素称作出栈退栈,是把栈顶元素删除掉。

栈Push

​ 栈中元素个数为零时称为空栈,栈也被称为先进后出表

栈Pop
栈的实现
  • 顺序栈
    • 结构

      /**
       顺序栈
       */
      typedef struct 
      {
          int top;
          int data[MaxSize];
          
      }SeqStack;
      
    • 初始化

      SeqStack* Init_seqStack(){
         SeqStack *s;
         s = (SeqStack *)malloc(sizeof(SeqStack));
         if (!s)
         {
           printf("创建失败\n");
           return NULL;
         }else{
           s->top = -1;
           printf("创建成功\n");
           return s;
         }
      }
      
    • 进栈

      /*
         压栈
       */
      void push_stack(SeqStack *s,int value){
          //判断是否栈满
          if (s->top == MaxSize - 1)
          {
              printf("栈满\n");
              return;
          }
          s->top++;
          s->data[s->top] = value;
          printf("进栈%d\n",value);
      }
      
      
    • 退栈

      /*
        出栈
       */
      void pop_stack(SeqStack *s){
          if (s->top <= 0)
          {
              printf("栈空\n");
              return;
          }
          printf("出栈%d\n",s->data[s->top]);
          s->top--;
         
      }
      
    • 空栈

      bool isEmptyStack(SeqStack s){
          return (s.top == -1);
      }
      
    • 获取栈顶元素

      int getStackTop(SeqStack s){
          return s.data[s.top];
      }
      
  • 链式栈
    • 结构

      /**
       链式栈结点
       */
      typedef struct StackNode
      {
          int  data;
          struct StackNode *next;
      }StackNode,*LinkStackNode;
      
      /*
        链式栈
       */
      typedef struct
      {
          LinkStackNode top;
          int length;
      }LinkStack;
      
    • 初始化

      LinkStack* InitLinkStack()
      {
          LinkStack *s = (LinkStack *)malloc(sizeof(LinkStack));
          if (s == NULL)
          {
            printf("创建失败\n");
            return NULL;
          }
          s->top=NULL;
          s->length=0;
          return s;
      }
      
    • 进栈

      void push_stackNode(LinkStack *s,int value){
         LinkStackNode node = (LinkStackNode )malloc(sizeof(StackNode));
         if (node == NULL)
         {
            printf("压栈失败\n");
            return;
         }
      
         node->data = value;
         node->next = s->top;
         s->top = node;
         s->length = s->length + 1;
      }
      
    • 退栈

      void pop_stackNode(LinkStack *s){
      
         if (s->length == 0)
         {
            printf("空栈\n");
            return;
         }
         LinkStackNode node = s->top;
         s->top = node->next;
         s->length--;
         free(node);
      }
      
      
    • 空栈

      bool isLinkStackEmpty(LinkStack S){
          if (S.count == 0)
              return true;
          else
              return false;
      }
      
      
    • 获取栈顶元素

      int getStackTop(LinkStack S){
          if(S.top == NULL)
              printf("空栈\n");
              return -1;
          else
            return S.top->data;
         
      }
      

相关文章

  • Java实现栈

    数组栈:压栈、出栈、返回栈顶元素 链式栈:压栈、出栈、返回栈顶元素

  • 数据结构之 栈

    栈结构 链式栈 一.栈结构体 1构建空栈 2栈置空 3判断栈空 4获取栈顶 5入栈 6出栈 7便利栈 二.链式栈 ...

  • 栈和队列

    1、栈 栈是一种先进先出的数据结构。栈顶进栈,栈顶出栈。 数据结构 栈的初始化 进栈 出栈 栈的最小值 2、队列 ...

  • 递归累加数组

    入栈 5入栈 4入栈 3入栈 2入栈 1出栈 [1 0]出栈 [2 1 0]出栈 [3 2 1 0]出栈 [4 3...

  • 栈的逻辑结构和存储结构

    main()进栈s(1)进栈s(0)进栈 s(0)出栈s(1)出栈main()出栈 顺序栈 一个数组 + 指向栈顶...

  • 单调栈 2020-06-12(未经允许,禁止转载)

    1.单调栈 指栈内元素保持单调性的栈结构,分为单调增栈(栈底到栈顶元素递增)和单调减栈(栈底到栈顶元素递减) 2....

  • 链栈的操作

    链栈的定义 链栈的操作 初始化 判断栈空 入栈 出栈

  • 函数调用栈平衡

    栈平衡 栈平衡:函数调用前后的栈顶指针指向的位置不变 内平栈 外平栈 内平栈: 指的是在函数调用返回之前使栈保持...

  • 栈的简单Java实现

    栈栈的特点是先进后出,出栈、入栈都是在栈顶操作。

  • 汇编学习-入栈和出栈

    栈有两个基本的操作:入栈和出栈。入栈就是将一个新的元素放到栈顶,出栈就是从栈顶取出一个元素。栈顶的元素总是最后入栈...

网友评论

      本文标题:

      本文链接:https://www.haomeiwen.com/subject/upoymhtx.html