• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

【数据结构】C语言栈的基本操作

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
#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\n", 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("请选择你需要的基本操作:\n"); printf("1************往栈中加入数据\n"); printf("2************遍历该栈\n"); printf("3************清空该栈\n"); printf("4************删除栈顶元素\n"); scanf_s("%d", &i); switch (i) { case 1: { printf("是否想往栈中输入数据?是选择1/否选择2\t"); scanf_s("%d", &dec); while (dec == 1) { PushStack(stack); printf("是否继续输入数据?是选择1/否选择2\t"); scanf_s("%d", &input); dec = input; } printf("你输入的数据为:\n"); 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:\t"); scanf_s("%d", &DEC); } while (DEC == 1); }

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
在C#中几种常见数组复制方法的效率对比发布时间:2022-07-13
下一篇:
C#操作session的类实例(转)发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap