数据结构笔记3双向栈
2015-12-02 16:45
781 查看
#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;
}
#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;
}
相关文章推荐
- 数据结构笔记5带头结点单链表
- 数据结构笔记4双向链表
- 数据结构笔记6链队列
- 黑马程序员——关于数据结构栈的实现方式的探讨
- 数据结构与算法-----冒泡排序
- 数据结构 字符串的长度
- 数据结构之 哈希表
- 数据结构之 哈希表
- 数据结构之 循环表线性表
- 数据结构之 循环表线性表
- 数据结构(Java)——图的基础算法
- 数据结构(Java)——Set和Map的应用
- 【C/C++学院】0828-STL入门与简介/STL容器概念/容器迭代器仿函数算法STL概念例子/栈队列双端队列优先队列/数据结构堆的概念/红黑树容器
- 文章标题
- Linux c 算法与数据结构--双向链表
- “数据结构与算法”有点难
- 数据结构之创建二叉树
- 数据结构之创建二叉树
- Trie树------一种NB的数据结构
- [数据结构]二分插入排序