c語言輸出隊列
① 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語言隊列輸出列印問題
要學會調試啊,你一調蔽悄試就會發現你的隊列頭是一個回車,然後擾並枯你就知道,你緩洞有回車沒處理