#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. HDOJ 题目2475 Box(link cut tree去点找祖先)

    Box Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  2. JSP-Runoob:JSP 表单处理

    ylbtech-JSP-Runoob:JSP 表单处理 1.返回顶部 1. JSP 表单处理 我们在浏览网页的时候,经常需要向服务器提交信息,并让后台程序处理.浏览器中使用 GET 和 POST 方法 ...

  3. 当下较热web前端技术汇总

    Web前段技术发展很快,主流技术日新月异,想想自己刚毕业那会用的asp技术,现在已经很少有主流网站在使用了.再到后来的J2EE框架,然后SpringMVC大行其道,但是最近各种js框架被广为传播,Ht ...

  4. akka设计模式系列-慎用ask

    慎用ask应该是Akka设计的一个准则,很多时候我们应该禁用ask.之所以单独把ask拎出来作为一篇博文,主要是akka的初学者往往对ask的使用比较疑惑. "Using ask will ...

  5. url参数为数组

    //url中state参数为数组 ?baseline_id=12&version_id=34&state[]=complete&state[]=hangup&state ...

  6. Codeforces 766E

    题意:给一棵树(1e5),每个节点上有对应权值(0<=ai<=1e6)定义树上两个节点间的距离为路径中节点的异或,求所有节点对间的距离和(包括节点自身也作为节点对,距离为节点权值). 解题 ...

  7. [转]mysql视图学习总结

    转自:http://www.cnblogs.com/wangtao_20/archive/2011/02/24/1964276.html 一.使用视图的理由是什么?1.安全性.一般是这样做的:创建一个 ...

  8. Java系列学习(九)-多态

    1.final关键字 (1)最终的意思, 可以修饰类,方法,变量 (2)特点: A:它修饰的类,不能被继承 B:它修饰的方法,不能被重写(覆盖) C:它修饰的变量,这个变量其实是一个常量 [扩展] ① ...

  9. OFDM同步算法之Minn算法

    minn算法代码 算法原理 训练序列结构 T=[B B -B -B],其中B表示由长度为N/4的复伪随机序列PN,ifft变换得到的符号序列 (原文解释):B represent samples of ...

  10. [ SHOI 2014 ] 概率充电器

    \(\\\) \(Description\) 一个含\(N\)个元器件的树形结构充电器,第\(i\)个元器件有\(P_i\)的概率直接从外部被充电,连接\(i,j\)的边有\(P_{i,j}\)的概率 ...