zoukankan      html  css  js  c++  java
  • 【数据结构】C语言栈的基本操作

    #include<stdio.h>
    #include<stdlib.h>
    #include<malloc.h>
    //定义节点
    struct Node
    {
        int data;
        struct Node *next;
    };
    typedef Node StackNode;
    //定义栈
     struct Stack
    {
        StackNode *top;
        StackNode *base;
    };
     typedef Stack SqStack;
     //定义创建栈的函数
     int InitStack(SqStack *S)
     {
         S->base = (StackNode*)malloc(sizeof(Node));
         if (!S->base)
         {
             printf("error");
             exit(1);
         }
         S->top = S->base;
    S->top->next=NULL;
    return 0; } //定义压栈函数 int PushStack(SqStack *S) { int e; StackNode *ps; ps = (StackNode *)malloc(sizeof(Node)); if (!ps) { printf("error"); exit(1); } printf("请输入你需要压入栈的数:"); scanf_s("%d", &e); ps->data = e; ps->next = S->top; S->top = ps; return 0; } //定义弹栈函数 int PopStack(SqStack *S) { int e; StackNode *ps; ps = S->top; S->top = S->top->next; e = ps->data; free(ps); return e; } //定义栈遍历函数 int TravelStack(SqStack *S) { StackNode *ps; ps = S->top; while (ps != S->base) { printf("数据为:%d ", ps->data); ps = ps->next; } return 0; } //定义判断栈是否为空函数 bool EmptyStack(SqStack *S) { StackNode *ps; ps = S->top; if (ps == S->base) { return true; } else { return false; } } //定义清空栈的函数 int ClearStack(SqStack *S) { StackNode *ps; ps = S->top; while (S->top != S->base) { S->top = S->top->next; free(ps); } return 0; } //主函数 int main() { int i,dec,input,DEC; SqStack *stack; stack = new Stack; InitStack(stack); do{ printf("请选择你需要的基本操作: "); printf("1************往栈中加入数据 "); printf("2************遍历该栈 "); printf("3************清空该栈 "); printf("4************删除栈顶元素 "); scanf_s("%d", &i); switch (i) { case 1: { printf("是否想往栈中输入数据?是选择1/否选择2 "); scanf_s("%d", &dec); while (dec == 1) { PushStack(stack); printf("是否继续输入数据?是选择1/否选择2 "); scanf_s("%d", &input); dec = input; } printf("你输入的数据为: "); TravelStack(stack); break; } case 2: { TravelStack(stack); break; } case 3: { ClearStack(stack); if (EmptyStack(stack)) { printf("该栈已经空!"); } else { printf("该栈不为空!"); }; break; } case 4: { int ReturnData; ReturnData = PopStack(stack); break; } } printf("是否要继续?是选择1/否选择2: "); scanf_s("%d", &DEC); } while (DEC == 1); }
  • 相关阅读:
    第四章之Hadoop I/O
    第五章之MapReduce应用开发
    数据预处理
    SQL Server Migration Assistant for MySQL!
    【转载】.NET设计模式之工厂方法模式(Factory Method)
    "lc.exe"已退出 代码为1 的解决方法
    【转载】.NET设计模式之抽象工厂模式(Abstract Factory)
    【转载】(收藏)《博客园精华集》分类索引
    【转载】.NET设计模式之观察者模式(Observer Pattern)
    【转载】使用Visual Studio 2010调试断点不起作用的问题解决办法(AutoCAD)
  • 原文地址:https://www.cnblogs.com/code-wangjun/p/4356528.html
Copyright © 2011-2022 走看看