• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

实现链栈的各种基本运算的算法

武飞扬头像
小淇在敲代码
帮助1

目的:领会链栈的存储结构和掌握链栈中各种基本运算算法的设计

内容:编写一个程序linkstack.cpp,实现链栈的各种基本运算(假设顺序表的元素类型 ElemType为char),并在此基础上设计一个程序exp3-2.cpp完成以下功能。

  1. 初始化栈s。
  2. 断栈s是否非空。
  3. 依次进栈元素a、b、c、d、e。
  4. 判判断栈s是否非空。
  5. 输出出栈序列。
  6. 判断栈s是否非空。
  7. 释放栈。
    1.  
      //计算机 小淇在敲代码 实现链栈的各种基本运算的算法
    2.  
      #include<stdio.h>
    3.  
      #include<malloc.h>
    4.  
      //链栈
    5.  
      #define MaxSize 50
    6.  
      typedef char ElemType;
    7.  
      char w;
    8.  
      typedef struct linknode
    9.  
      {
    10.  
      ElemType data;
    11.  
      struct linknode *next;
    12.  
      }LinkStNode;
    13.  
      //(1)初始化栈s
    14.  
      void InitStack(LinkStNode* &s)
    15.  
      {
    16.  
      s=(LinkStNode*)malloc(sizeof(LinkStNode));
    17.  
      s->next=NULL;
    18.  
      }
    19.  
      //(2)判断栈s是否非空
    20.  
      bool StackEmpty(LinkStNode *s)
    21.  
      {
    22.  
      return(s->next==NULL);
    23.  
      }
    24.  
      //(3)依次进栈元素a、b、c、d、e
    25.  
      bool Push(LinkStNode *&s,ElemType e)
    26.  
      {
    27.  
      LinkStNode *p;
    28.  
      p=(LinkStNode *)malloc(sizeof(LinkStNode));
    29.  
      p->data=e;
    30.  
      p->next=s->next;
    31.  
      s->next=p;
    32.  
      return true;
    33.  
      }
    34.  
      //(4)判断栈s是否非空
    35.  
       
    36.  
      //(5)输出出栈序列
    37.  
      bool Pop(LinkStNode* &s,ElemType &e)
    38.  
      {
    39.  
      LinkStNode *p;
    40.  
      if(s->next==NULL)
    41.  
      return false;
    42.  
      p=s->next;
    43.  
      e=p->data;
    44.  
      s->next=p->next;
    45.  
      free(p);
    46.  
      return true;
    47.  
      }
    48.  
      //(6)判断栈s是否非空
    49.  
       
    50.  
      //(7)释放栈
    51.  
      void DestroyStack(LinkStNode *&s)
    52.  
      {
    53.  
      LinkStNode *pre=s,*p=s->next;
    54.  
      while(p!=NULL)
    55.  
      {
    56.  
      free(pre);
    57.  
      pre=p;
    58.  
      p=pre->next;
    59.  
      }
    60.  
      free(pre);
    61.  
      }
    62.  
       
    63.  
      //主函数
    64.  
      int main()
    65.  
      {
    66.  
      LinkStNode *s;
    67.  
      printf("计算机 小淇在敲代码\n");
    68.  
      printf("链栈的各种基本运算的算法: \n");
    69.  
       
    70.  
      printf("(1)初始化栈s \n");
    71.  
      InitStack(s);
    72.  
       
    73.  
      printf("(2)判断栈s是否非空: %s\n",(StackEmpty(s)?"空":"非空"));
    74.  
       
    75.  
      printf("(3)依次进栈元素a、b、c、d、e \n");
    76.  
      Push(s,'a');
    77.  
      Push(s,'b');
    78.  
      Push(s,'c');
    79.  
      Push(s,'d');
    80.  
      Push(s,'e');
    81.  
       
    82.  
      printf("(4)判断栈s是否非空: %s\n",(StackEmpty(s)?"空":"非空"));
    83.  
       
    84.  
      printf("(5)输出出栈序列: ");
    85.  
      while(!StackEmpty(s))
    86.  
      {
    87.  
      Pop(s,w);
    88.  
      printf("%c",w);
    89.  
      }
    90.  
      printf("\n");
    91.  
       
    92.  
      printf("(6)判断栈s是否非空: %s\n",(StackEmpty(s)?"空":"非空"));
    93.  
       
    94.  
      printf("(7)释放栈: \n");
    95.  
      DestroyStack(s);
    96.  
      return 0;
    97.  
      }
    学新通

    学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgchhbk
系列文章
更多 icon
同类精品
更多 icon
继续加载