❶ c語言隊列操作
pq->rear->next
=
pnew這個代碼從隊列的尾部增加新節點,
然後pq->rear
=
pnew更新隊列尾部指針。隊列的數據結構形式就是由一個頭front指針,一個尾rear指針來表徵,items的設計是用空間換時間,涉及隊列大小的操作會非常方便。
隊列的特徵是先進先出,你給出的鏈式實現,其實就跟一個鏈表一樣,鏈表的添加刪除如果能理解了,隊列只是鏈表的元素增加/刪除
按先進先出特點的一種實現。
但對於隊列來說,實現方式不是重點,先進先出的性質才是重點,這在實際應用中很多,比如排隊叫號。
❷ 在循環隊列中怎樣實現入隊和出隊操作 數據結構 C語言
有個比較死板的經驗:把所有需要操作的變數改成指針SqQueue &Q改成SqQueue *Q,比如把所有的.改成->(因為用C語言需要指針操作);例如
int InitQueue(SqQueue *Q)
{
Q->base=(char *)malloc(MAXSIZE*sizeof(Elemtype));
if(Q->base==NULL) exit(0);
Q->front=Q->rear=0;
return 1;
} //初始化一個循環隊列;
❸ 數據結構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語言,用數組實現隊列的入隊,出隊函數編程
這樣的話應該符合你的要求:
#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 Max 300
typedef struct
{
int tail,head;
int a[Max];
}queue;
void enqueue(int key,queue&q)
{
q.a[q.tail]=key;
q.tail=(q.tail+1)%Max;
}
int dequeue(queue&q)
{
int key;
key=q.a[q.head];
q.head=(q.head+1)%Max;
return key;
}
用了c++引用。。。。。。沒有入隊前的判斷是否滿了以及出隊前判斷是否為空,這個你應該懂的
❻ 數據結構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語言用數組實現循環隊列的入隊出隊
//定義一個int型數組que,長度為N(常量切大於2).
intque[N];
intrear=0,front=0;//隊尾隊頭
判斷隊列已滿:
if((front+1)%N==rear%N)//成立則隊列已滿
判斷隊列為空
if((rear==front))//成立則隊列空
入隊(一般在入隊前判斷隊列是否已滿)
//將val入隊
que[front++]=val;
front%=N;
出隊(一般在出隊前判斷隊列是否為空)
rear=(rear+1)%N;
下一個要出隊的元素(一般先判斷是否為空)
que[rear];
❽ C語言中,隊列是什麼意思,有什麼用途
隊列是一種特殊的線性表。
隊列一種可以實現「先進先出」的存儲結構,即「一端入,一端出」,隊首(front)出隊,隊尾(rear)入隊,若front指向隊首,則rear指向隊尾最後一個有效元素的下一個元素;若rear指向隊尾,則front指向隊首第一個有效元素的下一個元素。
隊列特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。
(8)隊列出隊匹配c語言擴展閱讀
循環隊列各個參數的含義
1、隊列初始化front和rear的值都是零,初始化時隊列就是空的。
2、隊列非空front代表隊列的第一個元素rear代表了最後一個有效元素的下一個元素。
3、隊列空front和rear的值相等,但是不一定是零。