c語言鏈隊列
A. c語言中鏈表與隊列有什麼區別
C語言的鏈表與隊列是兩種不同的概念:
鏈表是一種數據的存儲方式,其保存的數據在內存中是不連續的,採用指針對數據進行訪問;
隊列是一種數據結構,其特點是先進先出,後進後出;
隊列的存儲方式可以使用線性表進行存儲,也可以使用鏈表進行存儲。
SQQUEUE的第一個元素elemtype
*elem;其實是指向了一個數組,該數組中存儲著類型為elemtype的元素,然後front和rear就標識了隊首和隊尾元素對應的數組下標。
typedef
struct _Point{
int x,y;
}Point;
#defineelemtype
Point//這個elemtype可以是任意你自己定義的結構,可以是結構體,也可以是簡單數據類型
elemtype
array[10]={0};//這個是隊列的數據結構,在這里是一個Point數組
SQQUEUE
queue={0};
queue.elem=array;//這樣array中的元素就是queue中的元素了。
queue.front=queue.rear=queue.size=0;
B. C語言中循環隊列的隊滿和隊空的判斷條件各是什麼有什麼不同
隊空時: Q.front == Q.rear;
隊滿時: Q.front == (Q.rear + 1) % MAXSIZE;
front指向隊首元素,rear指向隊尾元素的下一個元素。
maxsize是隊列長度。
(2)c語言鏈隊列擴展閱讀:
實現的代碼:
#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 100 //最大隊列長度
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
typedef struct {
ElemType *base; //隊列空間
int front; //隊頭指針
int rear; //隊尾指針,若隊尾不為空,則指向隊尾元素的下一個位置
}SqQueue;
//初始化循環隊列
Status initQueue(SqQueue &Q) {
Q.base = (ElemType *) malloc(MAXSIZE * sizeof(ElemType)); //申請空間
Q.front = Q.rear = 0; //隊空
return OK;
}
//入隊
Status enQueue(SqQueue &Q, ElemType e) {
if ((Q.rear + 1) % MAXSIZE == Q.front) return ERROR; //隊滿,無法添加
Q.base[Q.rear] = e; //插入元素
Q.rear = (Q.rear + 1) % MAXSIZE; //隊尾指針+1
return OK;
}
//出隊
Status deQueue(SqQueue &Q, ElemType &e) {
if (Q.front == Q.rear) return ERROR; //隊空,無法刪除
e = Q.base[Q.front]
Q.front = (Q.front + 1) % MAXSIZE; //隊頭指針+1
return OK;
}
//返回隊列長度
Status length(SqQueue &Q) {
return (Q.rear - Q.front + MAXSIZE) % MAXSIZE;
}
C. c語言中隊列是什麼東西
C語言中的隊列是一種數據結構,它是一種先進先出(FIFO)的數據管理方式。
隊列的基本思想:
- 最先進入隊列的元素(即最早添加的元素)將是第一個被移除的元素。這種管理方式確保了元素按照它們被添加到隊列中的順序進行處理。
隊列的主要操作:
- 入隊(Enqueue):在隊列的尾部添加一個新元素。
- 出隊(Dequeue):從隊列的頭部移除一個元素。
- 查看隊首元素(Front):查看隊列頭部元素但不移除它。這允許程序了解下一個將被處理的元素是什麼。
- 查看隊尾元素(Rear):查看隊列尾部元素但不移除它。這有助於了解隊列中最新的添加元素。
- 判斷隊列是否為空(IsEmpty):檢查隊列中是否沒有元素。這是為了避免在嘗試從空隊列中移除元素時發生錯誤。
- 判斷隊列是否已滿(IsFull):如果隊列有一個最大容量,此操作檢查隊列是否已達到這個容量。這對於管理具有固定大小的隊列非常重要。
隊列在C語言中的實現方式:
- 數組實現:使用固定大小的數組來存儲隊列元素,並通過兩個指針(一個指向隊列頭部,一個指向隊列尾部)來管理隊列。這種方法簡單直觀,但需要預先知道隊列的大致大小。
- 鏈表實現:使用鏈表來存儲隊列元素,這樣可以在不預先知道隊列大小的情況下動態地添加和移除元素。鏈表實現提供了更大的靈活性,但也可能增加處理的復雜性。
總的來說,隊列在C語言中是一種非常有用的數據結構,它支持高效的元素管理和處理,特別適用於需要按照元素添加順序進行處理的場景。
D. 鏈式存儲隊列的數據結構(邏輯結構+存儲結構)分析、鏈式存儲隊列的基本C語言結構體分析與定義
鏈式隊列
鏈式存儲結構的隊列稱作鏈式隊列。
鏈式隊列的隊頭指針指在隊列的當前隊頭結點位置,隊尾指針指在隊列的當前隊尾結點位置。不帶頭結點的鏈式隊列時可直接刪除隊頭指針所指的結點。
鏈式隊列中結點的結構體可定義如下:
typedef struct qnode
{
DataType datal;
Struct qnode *next;
}LQNode;
為了方便參數調用,通常把鏈式隊列的隊頭指針front和隊尾指針rear也定義為如下的結構體類型LQueue:
typedef struct
{
LQNode *front;
LQNode *rear;
}LQueue;
鏈式隊列操作的實現
(1) 初始化QueueInitiate(LQueue *Q)
void QueueInitiate(LQueue *Q)
{
Q->rear=NULL;
Q->front=NULL;
}
(2)非空否QueueNotEmpty(LQueue Q)
int QueueNotEmpty(LQueue Q)
/*判斷鏈式隊列Q非空否,非空返回1,否則返回0*/
{
if(Q.front==NULL)return 0;
else return 1;
}
(3)入隊列QueueAppend(LQueue *Q,DataType x)
int QueueAppend(LQueue *Q,DataType x)
/*把數據元素x插入鏈式隊列Q隊列的隊尾,入隊列成功返回1,否則返回0*/
{
LQNode *p;
if((p=(LQNode*)malloc(sizeof(LQNode)))==NULL)
{
printf(「內存不足無法插入!\n);
return 0;
}
p->data=x;
p->next=NULL;
if(Q->rear!=NULL)Q->rear->next=p;
Q->rear=p;
if(Q->front==NULL)Q->front=p;
return 1;
}
(4)出隊列QueueDelete(LQueue *Q,DataType *d)
int QueueDelete(LQueue *Q,DataType *d)
/*刪除鏈式隊列Q的隊頭數據元素值到d,出隊列成功返回1,否則返回0*/
{
LQNode *p;
if(Q->front==NULL)
{
printf(「隊列已空無數據元素出隊列!\n」);
return 0;
}
else
{
*d=Q->front->data;
p=Q->front;
Q->front=Q->front->next;
if(Q->front==NULL)Q->rear=NULL;
free(p);
return 1;
}
}
(5)取隊頭數據元素QueueGet(LQueue *Q,DataType *d)
int QueueGet(LQueue *Q,DataType *d)
/*取鏈式隊列Q的當前隊頭數據元素值到d,成功返回1,否則返回0*/
{
if(Q.front==NULL)
{
printf(「隊列已空無數據元素出隊列!\n);
return 0;
}
else
{
*d=Q.front->data;
return 1;
}
}
(6)撤銷動態申請空間Destory(LQueue *head)
int Destory(LQueue *head)
{
LQNode *p,*p1;
p=Q.front;
while(p!=NULL)
{
p1=p;
p=p->next;
free(p1);
}
}
幫你轉的,我覺得他描述的很清楚。希望對你有幫助。
E. 數據結構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;} //取隊頭
輸出滾備隊列所有數就是出隊