问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c语言数据结构高手请进,关于顺序栈的基本操作问题。

发布网友 发布时间:2022-04-20 04:34

我来回答

3个回答

热心网友 时间:2023-08-31 22:46

这是我以前写的,今天不想砍代码,就发这个了
#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-08-31 22:46

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

热心网友 时间:2023-08-31 22:47

这个栈算法问题太多了。。。。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 数据结构 栈的基本操作 操作系统的基本功能有哪些?你了解哪几种操作系统,各有什么特点? 用什么软件可以把图片转成PDF 用什么软件可以把视频转换成MP4? 用什么软件可以把一张照片分成多张 用什么软件可以把图片上的字换掉? 用什么软件可以强制将应用移到sd卡中? 用什么软件可以把视频里的人物用红圈圈起来什么软... 用什么软件可以把东西p到图片里 用什么软件可以把照片合成 用什么软件可以把歌转换成mp3形式? 用什么软件可以把图片调色调的好看一点的? 用什么软件可以把 视频连接 起来 用什么软件可以把视频转换成gif? 用什么软件可以把大文件传送到电脑 用什么软件可以把照片的脸换成自己的? 用什么软件可以把MP4文件转成MP3的?就是只要声音不... 操作系统有哪些,各有什么特点? 接线盒里线短!想把冰箱移出来,可电工师傅看了说... 小米电视2音箱的3.5mm端口可以插麦克风K歌吗 72v电动车充电器输出空载电压是多少? 72V的电动车,充电口的电压是多少V 正规72V20V充电器输出电压是多少伏? 请问正常72v电动车充满电是多少伏? 我的电动车是60v我用72v的充电器可以吗? 72v充电器空载输出电压只有71.5v为什么? 72V电动车电池充电器的输出功率是多少W 72伏电动车用多大的充电器? 电动四轮水电瓶72v充电器输出46v? 72伏电池最高充电电压值是多少 72v充电器输出电压是62v正常吗? 请问72伏电瓶用多少安充电器? 72V50A锂电池充电器输出电压和电流是多少? 72V20安电动车充满电是多少伏? 72v的充电器能充64V的电动车吗? 电动车充电器空载多少V?72V充电器空载输出84V正常 计算机网络的发展分哪四个阶段,特点? 免费看视频的软件有哪些? 计算机的发展阶段,特点,分类,应用及发展趋势是怎样的? 在哪个app上看电视不要钱还可以看超前点映?