当前位置:首页 » 编程语言 » c语言输出队列

c语言输出队列

发布时间: 2023-05-17 07:31:50

c语言循环队列输出,我的最后一个数值输出不了。

看得出来楼主想写个循环队列的结构……但是……确实……队列逻辑实在是混乱之极……楼主没有领悟到循环队列的精髓。。。
如果楼主耐心点的话,等我来行梁帮你改下这个代码吧……

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXQSIZE 10

typedef int QElemtype;
struct SqQueue{ //循环队列类型
QElemtype * base;
int front;
int rear;
};

void InitQueue(SqQueue &q)
{
q.base=(QElemtype *)malloc(MAXQSIZE * sizeof(QElemtype));
q.front=q.rear=0;
}

void EnQueue(SqQueue &q,QElemtype e)
{
if((q.rear+1)%MAXQSIZE==q.front)
{
printf("队列已满!\n");
return ;
}
q.base[q.rear]=e;
q.rear=(q.rear+1)%MAXQSIZE;
}

void DeQueue(SqQueue &q,QElemtype &e)
{
if(q.front==q.rear)
{
printf("队派带梁列为空!\n");
return ;
}
e=q.base[q.front];
q.front=(q.front+1)%MAXQSIZE;
}

void show(SqQueue q)
{
while(q.front!=q.rear)
{
printf("%d ",q.base[q.front]);
q.front=(q.front+1)%MAXQSIZE;
}
printf("\n");
}

void aa(SqQueue &q)
{
int x;
int l=(q.rear-q.front+MAXQSIZE)%MAXQSIZE;
while(l--)
{
DeQueue(q,x);
if(x>0) EnQueue(q,x);
}
}

void main()
{
SqQueue q;
InitQueue(q);
int t[10]={2, 3, -4, 6, -5, 8, -9, 7, -10, 20};
for(int i=0;i<10;i++)
{
EnQueue(q,t[i]);
}
show(q);
aa(q);
show(q);
}

//经编译通过……

关于楼主提到的少一个数据的问题是因为循环队列判断队列已满是以少存入一个数据来尘运判断的

② C语言,用数组实现队列的入队,出队函数编程

这样的话应该符合你的要求:

#include<stdio.h>
voidadd(intqueue[],intx);
intTop(intqueue[]);
voiddel(intqueue[]);
intend=0;
intmain()
{
intn;
scanf("%d",&n);//将要入队列n个元素
intqueue[1000];
for(inti=1;i<=n;i++)//输入n个元素
{
add(queue,i);//将i加入队列
}
//验证加入队列的元素,将队列中的元素按照输入的顺序输出:
for(i=1;i<=n;i++)
{
printf("%d",Top(queue));//Top函数返回队头元素
del(queue);//删除队头元素
}
//验证输出已经出队列后的队列(数组)元素:
printf(" ");
for(i=1;i<=n;i++)
printf("%d",queue[i]);
printf(" ");
return0;
}
voidadd(intqueue[],intx)
{
queue[++end]=x;
}
intTop(intqueue[])
{
returnqueue[1];//注意,这里的函数始终returnqueue[1];这里是和将普通数组中的元素输出最大的不同之处。!!!!!!
}
voiddel(intqueue[])
{
for(inti=2;i<=end;i++)
{
queue[i-1]=queue[i];
}
queue[end]=0;//将删除后的地方置0
end--;
}

③ c语言实现队列和栈的方法

#define OVERFLOW -1
#define OK 1
#define ERROR 0
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define N 20
typedef char SElemType;
typedef int Status;typedef struct {
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;#include<stdio.h>
#include<stdlib.h>Status CreatStack(SqStack &S){
//创建栈
S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S.base)exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}//CreatStackStatus Push(SqStack &S,SElemType e){
//插入e为新的栈顶元素
if(S.top-S.base>=S.stacksize){//栈满,追加存储空间
S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base)exit (OVERFLOW);//存储空间分配失败
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}//PushStatus Pop(SqStack &S ,SElemType &e){
//若栈不空,删除栈顶元素,并用e返回其值
if(S.top==S.base) return ERROR;
e=*--S.top;
return OK;
}//Pop typedef char QElemType;
typedef struct QNode{
QElemType data;
struct QNode *next;
}QNode,*QNodePtr;typedef struct{
QNodePtr front;
QNodePtr rear;
}LinkQueue;Status CreatQueue(LinkQueue &Q){
//建立一个空的链式栈
Q.front=Q.rear=(QNodePtr)malloc(sizeof(QNode));
if(!Q.front)exit(OVERFLOW);
Q.front->next=NULL;
return OK;
}Status EnQueue(LinkQueue &Q,QElemType e){ QNodePtr p;
p=(QNodePtr)malloc(sizeof(QNode));
if(!p)exit(OVERFLOW);
p->data=e;p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return OK;
}Status DeQueue(LinkQueue &Q,QElemType &e){QNodePtr p;<br>if(Q.front==Q.rear) return ERROR;<br>p=Q.front->next; e=p->data;<br>Q.front->next=p->next;<br>if(Q.rear==p) Q.rear=Q.front;<br>free(p);<br>return OK;<br>}int stackPalindrom_Test()//判别输入的字符串是否回文序列,是则返回1,否则返回0
{
printf("栈练习,请输入要判断的字符串以#作为结束符,不要超过二十个字符\n");
SqStack S;
CreatStack(S);
char c;
SElemType a;
SElemType b[N];
int count = 0;
fgets( b, N, stdin );
while((b[count])!='#')
{
Push(S,b[count]); //进栈
count++;
}
int i = 0;
while(i < count)
{
Pop(S,a);
if(a!=b[i])
return ERROR;
i++;
}
return OK;}//stackPalindrom_Test int queuePalindrom_Test()//判别输入的字符串是否回文序列,是则返回1,否则返回0
{
printf("队列练习,请输入要判断的字符串以#作为结束符,不要超过二十个字符\n");
LinkQueue Q;
CreatQueue(Q); char c;
SElemType a;
SElemType b[N];
int count = 0;
fgets( b, N, stdin );
while((b[count])!='#')
{
EnQueue(Q,b[count]);; //入列
count++;
} while(count-- > 0)
{
DeQueue(Q,a);
if(a!=b[count])
return ERROR;
}
return OK;
}//queuePalindrom_Test Status main(){ if(stackPalindrom_Test()==1)
printf("是回文\n");
else printf("不是回文\n"); if(queuePalindrom_Test()==1)
printf("是回文\n");
else printf("不是回文\n");
return OK;
}

④ 数据结构c语言版,出队入队及依次输出一个队列的操作。

黑色的提示框是程序运行结果窗口,不是错误的窗口

代码错误说明敏戚如下:

while(Q->front!=Q->rear)//在本循环体之中,Q->frontQ->rear的值始终没有变化
//故而在这里肯定是一个死循环
{
printf("%d,",Q->front->next->data);
Q->front->next=Q->front->next->next;
}
//改正后的代码如下:
QNode*s=Q->front;
while(s!=Q->rear)
{
printf("%d,",s->data);
s=s->next;
}

另外,所有的函数当中不应该有exit

exit是一个系统函桥毕陵数,表示结束程序,而不是退出函数

如果需要退出函数帆数可以使用return来达到该目的

⑤ 数据结构c语言版,出队入队及依次输出一个队列的操作。

#include<stdio.h>
#include<stdlib.h>

#defineElemTypeint
#defineStatusint
#defineOK1
#defineERROR0

typedefstructQNode{
ElemTypedata;
structQNode*next;
}QNode;

typedefstructLinkQueue{
QNode*front;
QNode*rear;
}LinkQueue;

StatusInitQueue(LinkQueue*q){//建立队列
q->front=q->rear=(QNode*)malloc(sizeof(QNode));
if(!q->front)
returnERROR;
q->front->next=NULL;
returnOK;
}

StatusEnQueue(LinkQueue*q,ElemTypee){//入队
QNode*p=(QNode*)malloc(sizeof(QNode));
if(!p)
returnERROR;
p->data=e;
p->next=NULL;
q->rear->next=p;//入队操作,从队尾(rear)进入
q->rear=p;
returnOK;
}

StatusDeQueue(LinkQueue*q,ElemType*e){//出队
QNode*p=(QNode*)malloc(sizeof(QNode));
if(!p)
returnERROR;

p=q->front->next;//q指向的是front指针的下一个位置,亦即队首元素
*e=p->data;
q->front->next=p->next;//出队操作后,front++
if(q->rear==p)//判断是否全部出队
q->rear=q->front;//如果全部出队,则将队列置为空
returnOK;
}

StatusPrintfQueue(LinkQueue*Q){
QNode*p;

for(p=Q->front->next;p!=NULL;p=p->next)
printf("%d ",p->data);
}

intmain(void)
{
inti,n;
ElemTypee,de;
LinkQueue*q=(LinkQueue*)malloc(sizeof(QNode));
if(!q)
returnERROR;
InitQueue(q);

printf("以下开始构造初始队列: ");

printf("请输入元素个数:");
scanf("%d",&n);
printf(" ");

for(i=0;i<n;++i){
printf("请输入第%d个元素:",i+1);
scanf("%d",&e);
EnQueue(q,e);
}
printf(" ");
printf("初始队列构造完毕! ");

printf("初始队列: ");
PrintfQueue(q);
printf(" ");
printf("====================================================== ");

printf("以下开始执行入队操作: ");

printf("请输入需入队的元素个数:");
scanf("%d",&n);
printf(" ");

for(i=0;i<n;++i){
printf("请输入第%d个元素:",i+1);
scanf("%d",&e);
EnQueue(q,e);
}
printf(" ");
printf("入队%d个元素操作完毕! ",n);

printf("此时队列: ");
PrintfQueue(q);
printf(" ");
printf("====================================================== ");

printf("以下开始执行出队操作: ");

printf("请输入需出队的元素个数:");
scanf("%d",&n);
printf(" ");

for(i=0;i<n;++i)
DeQueue(q,&de);
printf(" ");
printf("出队%d个元素操作完毕! ",n);

printf("此时队列: ");
PrintfQueue(q);
printf(" ");
printf("====================================================== ");

free(q);
return0;
}

执行结果

⑥ 数据结构C语言描述的链队列的基本操作(初始化,判空,入队,出队,取对头,输出队列所有值....)

void InitQueue(LiQueue *&q)
{q=(LiQueue *)malloc(sizeof(LiQueue));
q->front=q->rear-NULL;} //初始化

int QueueEmpty(LiQueue *q)
{if(q->rear==NULL)
return 1;
else
return 0;} //判空

void enQueue( LiQueue *&q,ElemType e)
{QNode *s;
s=(QNode *)malloc(sizeof(QNode));
s->data=e;
s->next=NULL;
if(q->rear==NULL)
q->front=q->rear=s;
else
{q->大局毁rear->next=s;
q->rear=s;
}} //入队

int deQueue( LiQueue *&q,ElemType &e)
{QNode *t;
if(q->rear==NULL)
return 0;
t=q->front;
if(q->front==q->rear)
q->front=q->rear=NULL;
else
q->front=q->front->next;
e=t->data;
free(t);
return 1;} /腊伍/出队

int deQueue( LiQueue *&q,ElemType &e)
{QNode *t;
if(q->rear==NULL)
return 0;
t=q->front;
if(q->front==q->rear)
q->front=q->rear=NULL;
else
q->front=q->front->next;
e=t->data;break;
free(t);
return 1;} //取队头

输出滚备队列所有数就是出队

⑦ c语言队列输出打印问题

要学会调试啊,你一调蔽悄试就会发现你的队列头是一个回车,然后扰并枯你就知道,你缓洞有回车没处理

热点内容
如何访问电脑工作组 发布:2025-07-16 09:39:24 浏览:182
动态优先权算法 发布:2025-07-16 09:39:02 浏览:201
火车wifi密码是多少啊 发布:2025-07-16 09:35:46 浏览:756
sql的视图是从中导出的 发布:2025-07-16 09:31:34 浏览:784
安卓如何打开shell窗口 发布:2025-07-16 09:28:09 浏览:313
华为荣耀备忘录文件夹 发布:2025-07-16 09:23:23 浏览:972
基于特征匹配算法 发布:2025-07-16 09:18:23 浏览:46
梦香神奇宝贝服务器的ip 发布:2025-07-16 09:14:07 浏览:212
电子密码手套箱是什么 发布:2025-07-16 09:13:27 浏览:799
手机连接数据库 发布:2025-07-16 09:13:23 浏览:132