#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define MAX 100
//定义两个方向生长的栈
typedef struct{
int data[MAX];
int top1,top2;
}DDStack;
DDStack s;
//创建
int InitStack(DDStack s){
s.top1=-1;
s.top2=MAX-1;
return 0;
}
//判满
int FullStack(DDStack s){
if(s.top1==s.top2-1)
return 1;
return 0;
}
//入栈 奇数放左边偶数放右边
int PushStack(DDStack s,int e){
int i=0;
int count=0;
if(e%2==0){
s.data[i++]=e;
s.top2--;
count++;
}
else{
s.data[i++]=e;
s.top1++;
count++;
}
return count;
}
//显示
int ShowStack(DDStack s,int count){
if(-1==s.top1&&MAX==s.top2){
printf("栈是空的!\n");
exit(0);
}
else
for(int i=0;i<count-1;i++)
printf("%d ",s.data[i]);
printf("%d",s.data[count-1]);
return 0;
}
//出栈
int PopStack(DDStack s,int count){
int i;
loop:
printf("请选择你要出栈的方向:1-左边,2-右边");
scanf("%d",&i);
if(i==1){
s.top1--;
count--;
}
else if(i==2){
s.top2++;
count--;
}
else
printf("你的输入有误,清再次输入!\n");
return count;
}
int main(){
DDStack s;
int i,e,count;
if(InitStack(s)){
printf("创建失败,按任意键返回!\n");
getch();
exit(0);
}
else{
printf("请输入你要入栈的个数:");
scanf("%d",&i);
printf("请输入你要入栈的数据:");
for(int j=0;j<i;j++){
if(FullStack(s)){
printf("占已满!无法进行入栈操作!\n");
break;
}
scanf("%d",&e);
PushStack(s,e);
count=PushStack(s,e);
printf("111\n");
}
ShowStack(s,count);
}
printf("是否进行出栈操作?1-是");
printf("请输入你的数字:");
scanf("%d",&i);
if(i==1){
count=PopStack(s,count);
ShowStack(s,count);
}
else
printf("栈的操作已经结束!\n");
printf("栈的操作已经结束!\n");
return 0;
}
数据结构笔记3双向栈
时间: 2024-11-03 21:04:12
数据结构笔记3双向栈的相关文章
13、蛤蟆的数据结构笔记之十三栈的应用之栈与递归之斐波那契数列
13.蛤蟆的数据结构笔记之十三栈的应用之栈与递归之斐波那契数列 本篇名言:"人生不是一支短短的蜡烛,而是一支由我们暂时拿着的火炬,我们一定要把它燃得." 继续递归的斐波那契数列问题. 欢迎转载,转载请标明出处: 1. 斐波那契数列 斐波那契数列,又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)在现代物理.准晶体结构.化学
11、蛤蟆的数据结构笔记之十一栈的应用之表达式求值实现
11.蛤蟆的数据结构笔记之十一栈的应用之表达式求值实现 本篇名言:"人生不售来回票,一旦动身,绝不能复返." 继续栈应用实现,这次是来看下表达式求值的栈实现. 欢迎转载,转载请标明出处: 1. 表达式求值 表达式求值是设计语言编译中的一个基本问题,它的实现是栈应用的又一个典型例子. 任何一个表达式都是由操作数(Operand).运算符(operator)和界限符(delimiter)组成. 操作数可以是常数也可以是变量或变量的标识符. 运算符可以分为算术运算符.关系运算符和逻辑运算符
9、蛤蟆的数据结构笔记之九栈的应用之行编辑实现
9.蛤蟆的数据结构笔记之九栈的应用之行编辑实现 本篇名言:"人生照例是一场值得一搏的争衡,然而它的奖品是拼斗." 继续栈结构的应用,行编辑. 欢迎转载,转载请标明出处: 1. 行编辑 行编辑的功能是接受用户从终端输入的程序或数据.每接受一个字符即存入用户数据区的做法不是最恰当的.好的做法是建立一个缓存区,允许洪湖输入出错,并在发现有无时可以及时更正.用栈来实现这个输入缓冲区是非常适合的. 每当从终端接受了一个字符后先作判别,如果不是退格符也不是退行符,则将该字符压入栈顶:如果是退格符
5、蛤蟆的数据结构笔记之五链栈实现
5.蛤蟆的数据结构笔记之五链栈实现 本篇名言:"人生就像奕棋,一步失误,全盘皆输." 昨天对栈和队列进行了定义.这次我们来看下如何使用代码来实现链栈和链队列,后续蛤蟆会记录如何将栈应用到实际问题中. 栈一般是顺序结构,但是也可以采用链式存储结构,具体如下实现. 欢迎转载,转载请标明出处: 1. 定义结构体 #define MAX_STACKS10 typedef struct { intkey; /*otherfields */ }element; typedef struct st
数据结构笔记1顺序栈
#include<stdio.h> #include<conio.h>#include<stdlib.h>#define MAX 100typedef struct{ int data[MAX]; int top;}Stack;Stack s;//初始化 成功1int InitStack(Stack s){ s.top=-1; return 1;}//判空 非空1int StackEmpty(Stack s){ if(-1==s.top) return 0; retu
数据结构笔记之——括号匹配(栈的应用之一)(SDOJ 2134)
// 度过了上周的悲催状态,我决定好好学习了-- //书上括号匹配是栈的简单应用,正好在SDOJ上看到这道题,顺便做了下 题目地址:SDOJ 2134 数据结构实验之栈四:括号匹配 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 给你一串字符,不超过50个字符,可能包括括号.数字.字母.标点符号.空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配. 输入 输入数据有多组,处理到文件结束. 输出 如果匹配就输出
15、蛤蟆的数据结构笔记之十五栈的应用之栈与递归之八皇后问题
15.蛤蟆的数据结构笔记之十五栈的应用之栈与递归之八皇后问题 本篇名言:"人的一生应当这样度过:当回忆往事的时候,他不致于因为虚度年华而痛悔,也不致于因为过去的碌碌无为而羞愧:在临死的时候,他能够说:"我的整个生命和全部精力,都已经献给世界上最壮丽的事业--为人类的解放而斗争." 继续递归问题,本次是经典的八皇后问题: 欢迎转载,转载请标明出处: 1. 八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出
14、蛤蟆的数据结构笔记之十四栈的应用之栈与递归之阿克曼函数
14.蛤蟆的数据结构笔记之十四栈的应用之栈与递归之阿克曼函数 本篇名言:"今天就是生命 ----- 是唯一你能确知的生命." 继续递归应用,阿克曼函数. 欢迎转载,转载请标明出处: 1. 阿克曼函数 阿克曼函数(Ackermann)是非原始递归函数的例子.它需要两个自然数作为输入值,输出一个自然数.它的输出值增长速度非常高,仅是对于(4,3)的输出已大得不能准确计算. Ackermann函数定义如下: 若m=0,返回n+1. 若m>0且n=0,返回Ackermann(m-1,1
7、蛤蟆的数据结构笔记之七栈的应用之数制转换
7.蛤蟆的数据结构笔记之七栈的应用之数制转换 本篇名言:"人生意义的大小,不在乎外界的变迁,而在乎内心的经验." 上面两篇中我们实现了链栈和链队列,接下去哦我们看看实际中栈的应用场景.本次来看下栈在数制转换的作用. 欢迎转载,转载请标明出处: 1. 原理介绍 十进制N和其他进制数的转换时计算机实现计算的基本问题.简单算法如下: N=(N div d )x d + N modd 2. 实现 2.1 定义结构体 定义堆栈的结构体 typedef struct { int