#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. OpenStack二三事(2)

    使用devstack在virtualbox上安装openstack还真是比較麻烦,到处都是坑.近期碰到的坑是在tempest上,在执行verify-tempest-config时,代码中import了 ...

  2. hdu5371 最长回文子串变形(Manacher算法)

    pid=5371">http://acm.hdu.edu.cn/showproblem.php? pid=5371 Problem Description Hotaru Ichijou ...

  3. 由文字生成path后制作写字的动画

    在看以下这个开源组件的时候,发现一个非常棒的方法,能够将文字生成path,这样就能够作出用笔写字的效果了. https://github.com/MP0w/MPParallaxCollection 关 ...

  4. 解析java中volatilekeyword

    在java多线程编程中常常volatile,有时候这个keyword和synchronized 或者lock常常有人混淆.详细解析例如以下: 在多线程的环境中会存在成员变量可见性问题: java的每一 ...

  5. Codeforces Round #250 (Div. 1) D. The Child and Sequence 线段树 区间求和+点修改+区间取模

    D. The Child and Sequence   At the children's day, the child came to Picks's house, and messed his h ...

  6. 【转】Android的WebView控件载入网页显示速度慢的究极解决方案

    秒(甚至更多)时间才会显示出来.研究了很久,搜遍了国外很多网站,也看过PhoneGap的代码,一直无解. 一般人堆WebView的加速,都是建议先用webView.getSettings().setB ...

  7. CDHD驱动器——ServoStudio配置高创伺服速度模式不转

    1. 摘要 速度模式(LED灯显示为0)时,电机不转,但是在位置模式(LED灯显示为8)却可以正常运转. 2. 设置 设置commode=1,fbitprd=1,fbitidx=-3,modmode= ...

  8. 关于OpenFileDialog的使用 2(转)

    关于OpenFileDialog的使用 (2010-03-25 12:51:33) 标签: 杂谈 分类: WinForm 1. OpenFileDialog控件有以下基本属性 InitialDirec ...

  9. go语言笔记——切片底层本质是共享数组内存!!!绝对不要用指针指向 slice切片本身已经是一个引用类型就是指针

    切片 切片(slice)是对数组一个连续片段的引用(该数组我们称之为相关数组,通常是匿名的),所以切片是一个引用类型(因此更类似于 C/C++ 中的数组类型,或者 Python 中的 list 类型) ...

  10. java四舍五入保留几位小数

    double d = 3.1415926; String result = String.format("%.2f", d); // %.2f %. 表示 小数点前任意位数 2 表 ...