问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

关于C语言的顺序栈的操作

发布网友 发布时间:2022-04-22 05:32

我来回答

3个回答

热心网友 时间:2023-07-05 07:01

这是我以前写的,今天不想砍代码,就发这个了
#include<stdio.h>
#include<stdlib.h>
#define N 100
//栈的结构定义
typedef struct
{
int elem[N];
int top;//栈顶
}Stack;
//循环队列的结构定义
typedef struct
{
int elem[N];
int front;
int rear;
}Queue;
int Greatstack(Stack*);
int GreatQueue(Queue *);
int pop(Stack *s);
void show(Stack *s);
int push(Stack *s);
int popStack(Stack *s);
int enQueue(Queue *q);
int deQueue(Queue *q);
int printQueue(Queue *q);
void conversion();
void main()
{
char exit='N';
int ch;
int result,data;
int m,e;
Stack s;
Queue q;
s.top=0;//栈顶指向当前栈顶的下一位置
q.front=q.rear=0;
do
{
system("CLS");
printf("\t\t********************************************\n");
printf("\t\t* 1.创建一个顺序栈 .................(1) *\n");
printf("\t\t* 2.出栈.............................(2) *\n");
printf("\t\t* 3.入栈.............................(3) *\n");
printf("\t\t* 4.顺序栈中元素依次出栈,并显示.....(4) *\n");
printf("\t\t* 5.创建一个循环队列.................(5) *\n");
printf("\t\t* 6.进队.............................(6) *\n");
printf("\t\t* 7.出队.............................(7) *\n");
printf("\t\t* 8.循环队列中元素依次出队,并显示...(8) *\n");
printf("\t\t* 9.十进制数转换为其它进制数.........(9) *\n");
printf("\t\t* 10.退出 ..............(10) *\n");
printf("\t\t********************************************\n");
printf("\n请选择操作代码:");
scanf("%d",&ch);
switch(ch)
{
case 1:
printf("创建一个顺序栈\n");
result=Greatstack(&s);
if(result==0)printf("顺序栈创建失败,栈已满!\n");
else printf("顺序栈创建成功!\n");
system("pause");
break;
case 2:
printf("出栈:\n");
m=pop(&s);
if(m==0)printf("出栈失败,栈已空!\n");
else
{
printf("顺序栈出栈成功!\n");
printf("该栈剩余元素为:");
show(&s);
}
//请加入出栈操作的代码或函数调用
system("pause");
break;
case 3:
printf("进栈:\n");
printf("请输入入栈的元素");
scanf("%d",&e);
result=push(&s,e);
if(result==0)printf("栈已满!\n");
else
{
printf("顺序栈入栈成功!\n");
printf("该栈剩余元素为:");
show(&s);
}
//请加入进栈操作的代码或函数调用
system("pause");
break;
case 4:
printf("顺序栈中元素依次出栈,出栈序列为:\n");
popStack(&s);
//请加入依次出栈并显示元素操作的代码或函数调用
system("pause");
break;
case 5:
printf("创建一个循环队列\n");
result=GreatQueue(&q);
if(result==0)printf("循环队列创建失败,循环队列已满!\n");
else printf("循环队列创建成功!\n");
system("pause");
break;
case 6:
printf("入队:\n");
data=enQueue(&q);
if(result=0) printf("队已经满了\n");
else printf("入队成功\n");
//请加入入队操作的代码或函数调用
system("pause");
break;
case 7:
printf("出队:\n");
data=deQueue(&q);
if(data=0) printf("队已经空了\n");
else printf("出队成功\n");
//请加入依次出队操作的代码或函数调用
system("pause");
break;
case 8:
printf("循环队列中元素依次出队,出队序列为:\n");
//请加入依次出队并显示元素操作的代码或函数调用
data=printQueue(&q);
system("pause");
break;
case 9:
printf("十进制数转换为其它进制数:\n");
conversion();
//请加入十进制数转换为其它进制数操作的代码或函数调用
system("pause");
break;
case 10:
getchar();
printf("\n您是否真的要退出程序(Y/N):");
exit=getchar();getchar();
break;
default:
printf("\n无效输入,请重新选择...:");
}
}while(exit!='y'&&exit!='Y');
}
/*从键盘输入一系列整数,当输入值为0时,停止输入,产生顺序栈*/
/*返回0表示生成成功,1表示失败*/
int Greatstack(Stack *s)
{
int e;
s->top=0;//栈顶指向当前栈顶的下一位置
printf("请依次输入需要入栈的元素,以0表示输入结束:");
do
{
scanf("%d",&e);
if(e!=0)
{ if(s->top>=N)return 0;//栈满
s->elem[s->top++]=e;
}
}while(e!=0);
}
/*从键盘输入一系列整数,当输入值为0时,停止输入,产生循环队列*/
/*返回0表示生成成功,1表示失败*/
int GreatQueue(Queue *q)
{
int e;
q->front=q->rear=0;//初始化队列
printf("请依次输入需要入栈的元素,以0表示输入结束:");
do
{
scanf("%d",&e);
if(e!=0)
{ if((q->rear+1)%N==q->front)return 0;//队满
q->elem[q->rear]=e;
q->rear=(q->rear+1)%N;
}
}while(e!=0);
return 1;
}
int pop(Stack *s) //出栈
{
if(s->top==0)
return 0;
--s->top;
}
void show(Stack *s) //显示栈中的元素
{
int i=s->top;
while(i!=0)
{
--i;
printf("%d ",s->elem[i]);
}
}
int push(Stack *s,int e) //入栈
{
if(s->top>=N)return 0;
s->elem[s->top++]=e;
}
int popStack(Stack *s) //顺序栈中元素依次出栈,并显示
{
while(s->top!=0)
{
--s->top;
printf("%3d",s->elem[s->top]);
}
return 0;
}
int enQueue(Queue *q) //入队
{
int e;
printf("请输入入栈的元素:");
scanf("%d",&e);
if((q->rear+1)%N == q->front) return 0;
q->elem[q->rear]=e;
q->rear=(q->rear+1)%N;
return 1;
}
int deQueue(Queue *q) //出队
{
int *e;
if(q->front == q->rear) return 0;
e =q->elem[q->front];
q->front=(q->front+1)%N;
return 1;
}
int printQueue(Queue *q) //循环队列中元素依次出队,并显示
{
if(q->front == q->rear) return 0;
for(;q->front!=q->rear;)
{
printf("%3d",q->elem[q->front]);
q->front++;
}
}
void conversion() //十进制数转换为其它进制数
{
Stack p1;
int n,m;
puts("请输入需要转换的元素:");
scanf("%d",&n);
puts("请输入需要转换的进制:");
scanf("%d",&m);
p1.top=0;
while(n)
{
push(&p1,n%m);
n=n/m;
}
popStack(&p1);
}

热心网友 时间:2023-07-05 07:02

遇到什么问题了?没遇到问题就暂且用着呗

热心网友 时间:2023-07-05 07:02

这个栈算法问题太多了。。。。
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
请问世事洞明皆学问,人情练达即文章是什么意思呀 世事洞明皆学问人情练达即文章意思 翡翠中的绿是怎么形成的翡翠中的绿是如何形成的 小学资格证音乐好考吗 关于心机套路深的句子 大宗交易体现在龙虎榜吗 一个大锅盖,怎样加两个高频头,收看同一个卫星呢?请高手指教。_百度知 ... 如何制作卫星锅 DNF 里有个任务不知道怎么做,请各位帮我看一下 国内怎么炒黄金期货? 一个是阆苑仙葩 一个是美玉无瑕 若说没奇缘 今生偏... 数据结构 顺序栈 数据结构中什么叫做顺序栈? 什么软件可以把声音变为文字 顺序栈的栈顶指针 当栈满时 指向 最后一个栈元素的... 别人发的粤语语音可以翻译成中文吗 两栈共享一个存储空间,判定栈满的条件是什么? 有一个和红楼梦 贾宝玉有关的拼音是mu shi qian mo... 电影粤语如何转为中文音频 顺序栈会存在栈满的情况,链栈也会存在栈满的情况吗 红楼梦神瑛侍者住在哪 当用长度为N的数组顺序存储一个栈时,假定用top==N... 栈满的条件 怎么才能系统的学习软件测试,好就业呢? 为什么ApacheBench和Jmeter测试的结果很不同 设顺序栈存放在S.data[maxsize]中,栈底位置是maxs... 判断顺序栈(最多节点数为m)为栈满的条件是? jmeter和loadrunner的区别 中国人均GDP距高收入国家水平还有多远? 判定一个顺序栈为栈满的条件 手机视频粤语转换普通话 数据结构中顺序栈的问题? 为什么说栈满只是在顺序栈中考虑,而链式栈不必考虑... 讲一讲:你所知道的小孩过春节的习俗吗? 在播放视频的时候,怎样把粤语的形式变成中文形式... 数据结构顺序栈的问题 如何把音频文件转换成文字?要能转换成粤语的。 春节习俗幼儿 林黛玉是绛珠草转世,她前世跟贾宝玉有怎样的感情... 春节期间,有哪些民俗和传统,是一定要给孩子科普... 怎么把电影粤语声音改成普通话 顺序栈的出栈入栈 求以下成语的解释,帮帮忙撒... 如何发语音转换成文字 “儿童强不睡,相守夜欢哗”说的是春节哪项习俗? 数据结构 顺序栈的问题 粤语转为普通话 一个是阆苑仙葩,一个是美玉无瑕,若说没奇缘,今... “一个是阆苑仙葩,一个是美玉无瑕。若说没奇缘,今生... 栈的顺序储存空间中,元素个数怎么算?
  • 焦点

最新推荐

猜你喜欢

热门推荐