#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. LeetCode 246. Strobogrammatic Number (可颠倒数字) $

    A strobogrammatic number is a number that looks the same when rotated 180 degrees (looked at upside ...

  2. School Personal Contest #1 (Codeforces Beta Round #38)---A. Army

    Army time limit per test 2 seconds memory limit per test 256 megabytes input standard input output s ...

  3. ASP.NET无法检测IE10浏览器,导致无法登录

    今天发现在IE10中打开我开发的网站时,无法登入,页面总会自动重新退出到登录页,后经上网查资料发现这是ASP.NET 2.0.3.5和4.0的Bugs,因这些版本的.NET Framework无法识别 ...

  4. bzoj2216

    决策单调性+整体二分 这里就是j<k且kj劣于j,j不会再选,所以我们整体二分 pos是因为从L->R中这个是最优点,所以对于mid+1->r选pos之前肯定不优,l->mid ...

  5. Spark 机器学习------逻辑回归

    package Spark_MLlib import javassist.bytecode.SignatureAttribute.ArrayType import org.apache.spark.s ...

  6. cookie封装函数(添加,获取,删除)

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  7. Java的Thread.currentThread().getName() 和 this.getName() 以及 对象.getName()区别???

    最近在看Java多线程这本书,但是发现里面有个概念自己搞不清楚.就是Thread.currentThread().getName() 和 this.getName() 以及 对象.getName()区 ...

  8. BZOJ 4668 LCT

    思路: 这不是LCT裸题嘛23333 (好像并查集+按秩合并就可以搞了 我还是too young) 维护边权的话 就新加一个点 代表边 这个点想线段的两个端点连边就好了 //By SiriusRen ...

  9. js 中的定时器

    在js中的定时器分两种:1.setTimeout() 2.setInterval() 1.setTimeOut() 只在指定时间后执行一次 /定时器 异步运行 function hello(){ al ...

  10. linux如何更改yum源

    更改linux yum源方法:第一步:进入yum配置文件目录:cd /etc/yum.repos.d/第二步:备份配置文件(如果后续出现了问题就可以恢复):mv CentOS-Base.repo Ce ...