#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();
}
S->top = S->base;
S->top->next=NULL;
return ;
}
//定义压栈函数
int PushStack(SqStack *S)
{
int e;
StackNode *ps;
ps = (StackNode *)malloc(sizeof(Node));
if (!ps)
{
printf("error");
exit();
}
printf("请输入你需要压入栈的数:");
scanf_s("%d", &e);
ps->data = e;
ps->next = S->top;
S->top = ps;
return ;
}
//定义弹栈函数
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 ;
}
//定义判断栈是否为空函数
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 ;
}
//主函数
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 :
{
printf("是否想往栈中输入数据?是选择1/否选择2\t");
scanf_s("%d", &dec);
while (dec == )
{
PushStack(stack);
printf("是否继续输入数据?是选择1/否选择2\t");
scanf_s("%d", &input);
dec = input;
}
printf("你输入的数据为:\n");
TravelStack(stack);
break;
}
case :
{
TravelStack(stack);
break;
}
case :
{
ClearStack(stack);
if (EmptyStack(stack))
{
printf("该栈已经空!");
}
else
{
printf("该栈不为空!");
};
break;
}
case :
{
int ReturnData;
ReturnData = PopStack(stack);
break;
}
}
printf("是否要继续?是选择1/否选择2:\t");
scanf_s("%d", &DEC);
} while (DEC == );
}

【数据结构】C语言栈的基本操作的更多相关文章

  1. [数据结构]C语言栈的实现

    有始有终,所以我准备把各种数据结构都讲一次,栈也分顺序存储和链式储存,这里我们选择链式存储来讲,顺序存储没有难度(链式其实也是) 作为数据结构中最简单的栈,这里不会说太多,首先考虑一下下面的model ...

  2. 顺序栈的基本操作(C语言)

    由于现在只学了C语言所以就写这个C语言版的栈的基本操作 这里说一下 :网上和书上都有这种写法 int InitStack(SqStack &p) &p是取地址  但是这种用法好像C并不 ...

  3. PHP数据结构之五 栈的PHP的实现和栈的基本操作

    栈和队列是两种应用非常广泛的数据结构,它们都来自线性表数据结构,都是“操作受限”的线性表. 栈栈在计算机的实现有多种方式:硬堆栈:利用CPU中的某些寄存器组或类似的硬件或使用内存的特殊区域来实现.这类 ...

  4. SDUT-3335_数据结构实验之栈与队列八:栈的基本操作

    数据结构实验之栈与队列八:栈的基本操作 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 堆栈是一种基本的数据结构.堆栈具 ...

  5. C语言栈与调用惯例

    C语言栈与调用惯例 1.前言 最近在再看<程序员的自我修养>这本书,对程序的链接.装载与库有了更深入的认识.关于这本书的评价可以去豆瓣看看http://book.douban.com/su ...

  6. 数据结构(C语言)—排序

    数据结构(C语言)—排序 排序 排序是按关键字的非递增或递减顺序对一组记录中心进行排序的操作.(将一组杂乱无章的数据按一定规律顺次排列起来.) 未定列表与不稳定列表 假设 Ki = Kj ( 1 ≤ ...

  7. c++学习书籍推荐《清华大学计算机系列教材:数据结构(C++语言版)(第3版)》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <清华大学计算机系列教材:数据结构(C++语言版)(第3版)>习题解析涵盖验证型.拓展型.反思型.实践型和研究型习题,总计290余道大题.525道 ...

  8. Go语言cookie的基本操作

    cookie数据结构介绍 cookie数据结构介绍 a. Expires,cookie过期时间,使用绝对时间.比如2018/10/10 10:10:10b. MaxAge,cookie过期时间,使用相 ...

  9. SDUT-2088_数据结构实验之栈与队列十一:refresh的停车场

    数据结构实验之栈与队列十一:refresh的停车场 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description refresh最近发 ...

随机推荐

  1. 【转】在Oracle中查看各个表、表空间占用空间的大小

    查看当前用户每个表占用空间的大小:    select segment_name,sum(bytes)/1024/1024 from user_extents group by segment_nam ...

  2. Unity编程笔录--ulua+PureMVC框架简单热更新使用

    ulua+PureMVC框架简单热更新使用 前言: 1:作者官网论坛 首先介绍的是这个框架是一位大牛  骏擎[CP]  jarjin   写的,据说原本是"非常多人不知道怎么使用Ulua,所 ...

  3. Ubuntu下用命令行快速打开各类型文件(转)

    nautilus /media/pm/文档/book/system/必读nautilus /media/pm/文档/book/android/ndk 内核/framerwork/android wai ...

  4. ubuntu16.04安装flash player

    ubuntu16.04安装flash player sudo apt-get install flashplugin-installer 1 2019: apt-get install browser ...

  5. Vue相关开源项目库汇总 http://www.opendigg.com/tags/front-vue

    awesome-github-vue 是由OpenDigg整理并维护的Vue相关开源项目库集合.我们会定期同步OpenDigg上的项目到这里,也欢迎各位提交项目给我们. 如果收录的项目有错误,可以通过 ...

  6. 【HDU 1007】 Quoit Design

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=1007 [算法] 答案为平面最近点对距离除以2 [代码] #include <algorith ...

  7. jQuery的jsop,jsonp跨域请求

    https://www.cnblogs.com/chiangchou/p/jsonp.html

  8. PCB 利用nginx正向代理实现上网

    在PCB行业中,为了保证服务器的安全性,服务器正常都是需要与外网断开的,如果想在服务器通过浏览器下载一点东西是不行.通常作法是在一台可以上网的电脑下载文件,接着放到网络盘上,再从网络盘拷贝到服务器上. ...

  9. PCB genesis自制孔点 Font字体实现方法

    一.先看genesis原有Font字体 在PCB工程CAM加孔点字体要求时,通常我们直接用Geneis软件给我们提供了2种孔点字体canned_57与canned_67,但此字体可能不能满足各个工厂个 ...

  10. IE版本的判断

    var Sys = {};var ua = navigator.userAgent.toLowerCase(); var s;(s = ua.match(/msie ([\d.]+)/)) ? Sys ...