码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构笔记3双向栈

时间:2015-12-02 17:46:09      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

#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双向栈

标签:

原文地址:http://www.cnblogs.com/100114jerro/p/4998738.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!