博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【数据结构与算法C】利用两个栈S1S2模拟一个队列,用栈的基本操作实线EnQueue,DeQueue,QueueEmpty ...
阅读量:5026 次
发布时间:2019-06-12

本文共 3586 字,大约阅读时间需要 11 分钟。

【数据结构与算法C】利用两个栈S1S2模拟一个队列,用栈的基本操作实线EnQueue,DeQueue,QueueEmpty

入队列

Created with Raphaël 2.1.2开始S2为空出S1入S2入S1yesno

出队列

Created with Raphaël 2.1.2开始S2不为空出S2结束出S1入S2S2不为空出S2yesnoyes
/* * main.c * *  Created on: Apr 19, 2015 *      Author: xubin *      利用两个栈S1S2模拟一个队列,用栈的基本操作实线EnQueue,DeQueue,QueueEmpty */#include
#include
#define STACKINITSIZE 100#define STACKINCREMENT 10#define TRUE 1#define FALSE 0typedef int bool;//顺序栈typedef struct{ char *base; char *top; int stacksize;}SqStack;//函数声明int StackLength(SqStack S);//若栈S为空,则返回TRUE,否则返回FALSEbool StackEmpty(SqStack S);// 销毁栈S,S不在存在bool DestroyStack(SqStack *S);//构造一个空栈bool InitStack(SqStack *S){ S->base = (char *)malloc(STACKINITSIZE * sizeof(SqStack)); if(S->base == NULL){ return FALSE; } S->top = S->base; S->stacksize = STACKINITSIZE; return TRUE;}// 若栈不为空,则用e返回栈顶元素,并返回true,否则返回falsebool GetTop(SqStack S,char *e){ if(S.top == S.base){ return FALSE; } *e = *(S.top - 1); return TRUE;}//插入元素e为新的栈顶元素bool Push(SqStack *S,char e){ if(S->top - S->base >=S->stacksize){ //栈满,追加存储空间 S->base = (char *)realloc(S->base,(S->stacksize + STACKINCREMENT) * sizeof(SqStack)); if(S->base == NULL){ return FALSE; } S->top = S->base + S->stacksize; } *S->top ++ = e; return TRUE;}// 若栈不为空,则删除S的栈顶元素,用e返回其值,并返回TRUE,否则返回FALSEbool Pop(SqStack *S,char *e){ if(S->top == S->base){ return FALSE; } *e = * -- S->top; // 传递指针指向的内容而不是传递指针 //e= --S->top; // 错误的传递方法 return TRUE;}//**********************************************************************//**********************************************************************// 用栈的基本操作模拟队列// 利用两个栈S1S2模拟一个队列,用栈的基本操作实线EnQueue,DeQueue,QueueEmpty//bool EnQueue(SqStack *S1,SqStack *S2,char e){ char temp; //如果S2为空,出S1入S2 if(StackEmpty(*S2) == TRUE){ while(StackEmpty(*S1) == FALSE){ Pop(S1,&temp); Push(S2,temp); } } Push(S1,e); return TRUE;}bool DeQueue(SqStack *S1,SqStack *S2,char *e){ char temp; // 判断是否为空 if(StackEmpty(*S2) == TRUE && StackEmpty(*S1) == TRUE){ return FALSE; } if(StackEmpty(*S2) == FALSE){ Pop(S2,e); } else{ while(StackEmpty(*S1) == FALSE){ Pop(S1,&temp); Push(S2,temp); } Pop(S2,e); } return TRUE;}bool QueueEmpty(SqStack S1,SqStack S2){ if(StackEmpty(S1) == TRUE && StackEmpty(S2) == TRUE){ return TRUE; }else return FALSE;}//*********************************************************************//*********************************************************************int main(){ SqStack S1,S2; char ch; char temp; printf("顺序栈的基本操作\n"); if(InitStack(&S1) == 1 && InitStack(&S2) == 1){ printf("栈初始化成功\n"); } else{ printf("初始化失败\n"); return 1; } printf("现在输入一串字符串,压入队列:"); ch = getchar(); while(ch != '\n' && EnQueue(&S1,&S2,ch)){ ch = getchar(); } while(QueueEmpty(S1,S2) == FALSE){ DeQueue(&S1,&S2,&temp); printf("%c\t",temp); } return 0;}//返回栈S的元素的个数,即栈的长度int StackLength(SqStack S){ //int num = 0; return (S.top - S.base);}// 销毁栈S,S不在存在bool DestroyStack(SqStack *S){ if(S->base == NULL) return FALSE; free(S->base); return TRUE;}//若栈S为空,则返回TRUE,否则返回FALSEbool StackEmpty(SqStack S){ if(S.top == S.base){ return TRUE; } else{ return FALSE; }}

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/bingfeng13/p/4668999.html

你可能感兴趣的文章
JSON 小记
查看>>
《Linux命令行与shell脚本编程大全 第3版》高级Shell脚本编程---06
查看>>
[1-4] 把时间当做朋友(李笑来)Chapter 4 【开拓我们的心智】 摘录
查看>>
redis数据过期策略【转】
查看>>
ASP.net MVC4 View设置Html代码显示为文本字符问题
查看>>
go语言之进阶篇关闭channel
查看>>
《那些年啊,那些事——一个程序员的奋斗史》——65
查看>>
opencv 内存溢出问题
查看>>
简单的静态网页(宠物网)
查看>>
HDU 5410(2015多校10)-CRB and His Birthday(全然背包)
查看>>
hdu 2874 Connections between cities(st&rmq LCA)
查看>>
【Linux基础学习之五】Linux管理命令的基础学习(df、du、free、kill、tar等)
查看>>
20171115
查看>>
求最长公共子串
查看>>
根据百度API获得经纬度,然后根据经纬度在获得城市信息
查看>>
强制客户端更新Silverlight XAP文件方法汇总(转)
查看>>
Android tabLayout+recyclerView实现锚点定位
查看>>
numpy.squeeze()的用法
查看>>
数字滤波器 C语言
查看>>
JAVA基础知识 String s = new String("ABC") VS String s = "abc"
查看>>