数据结构笔记3双向栈

#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;
}

时间: 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