當前位置:首頁 » 編程語言 » 李春葆c語言環形隊列
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

李春葆c語言環形隊列

發布時間: 2022-11-15 17:00:07

c語言結構體那塊的隊列問題。我們書上沒有,是能給我講講。把我講懂我給加分

你好,隊列用簡單的話講就是一個數組,這個數組是先進先出的。
隊列包含兩個屬性,一個叫head,head指向隊頭,另一個叫tail,tail 指向當前的隊尾。
舉個例子:用一個數組q[1...n]來表示一個隊列,裡面最多放n-1個元素,各元素的位置為:head,head+1,...,tail-1,在最後一個位置要進行圈繞,即讓隊列中的n個元素排成環形,位置1剛好在位置n的後面。
開始時候head=tail=1,因為沒有元素,都指向q[1],然後是入隊操作,入隊操作直接往「隊尾」添加元素即可,將插入的元素賦值給q[tail],然後看tail是不是已經到數組的末尾位置了,如果到了,tail=1(實現了環形數組),如果沒有到,那麼tail=tail+1,入隊結束。刪除操作是直接從「隊頭」刪除,找到q[head],將其值取出賦值給一個變數比如說x,然後看head是不是已經到數組的末尾位置了,如果到了,head=1(實現了環形數組),如果沒有到,那麼head=head+1,出隊結束。判隊列是否為空操作,就看head是否等於tail,等於就是空的。最後,注意當隊列為空時,試圖刪除一個元素,就會導致隊列下溢,應該在刪除前先判定隊列是否為空。如果head=tail+1時(因為是環形),隊列滿,此時添加元素會溢出,應該在添加操作前判定。

㈡ c語言數據結構循環隊列問題

主要錯在InitQueue函數裡面。當聲明一個指針的時候,除了指針本身佔用的內存以外,是不會分配具體的內存空間的。也就是說,如果只是CircQueue *q;聲明指針q,然後直接使用它的內部成員q->front,q->rear = 0是不合法的。實際上,在Visual Studio裡面是編譯不通過的。

修改後運行截圖

CircQueue*InitQueue(){
CircQueue*q=(CircQueue*)malloc(sizeof(CircQueue));
q->front=0;
q->rear=0;
returnq;
}

㈢ 數據結構習題與解析 C語言篇 李春葆 清華大學出版社 2000出版

破壞環境:由於環境是生態系統的成分之一,它的改變會影響生態系統的穩定。由於破壞環境打破生態環境平衡的例子很多,諸如:湖沼富營養化的形成;日本汞中毒事件;氟化物破壞了臭氧層;阿斯旺水壩生態環境惡化;「六六六」、「DDT」施用後的惡果;地球的「濕室效應」等。二、破壞植被,以森林為主體的植被是陸地生態平衡的杠桿,地球上由於破壞植被導致的生態災難最多,如1934年發生在美國西部的黑風暴,毀掉耕地4500餘萬畝;1963年發生在前蘇聯農墾區的大風暴,毀田3億多畝;同樣因森林的破壞,使古老的巴比侖文明滅亡;印度與巴基斯坦之間的塔爾平原,因森林破壞淪為沙漠,沙漠面積達65萬平方公里;中國黃河流域生態條件的變壞,源於其中上游森林植被的破壞,當今長江將變成第二條黃河;東北林區生態條件變壞,主要原因是對西南林區和東北林區森林的不合理採伐和過度採伐。三、破壞食物鏈:破壞食物鏈打破生態平衡的例子如:因過量捕殺害蟲的天敵引發林木病蟲害;印度曾大量捕殺水獺使病魚增多,魚產量下降;牧業發達的澳大利亞,因牛糞覆蓋草地成災引發蜣螂解救的例子更為新鮮。當然在生物圈內往往是幾種誘因並存的。

㈣ 用C語言做循環隊列的操作驗證

//文件名稱:LoopQueue.h//功能說明:實現了循環隊列結構//使用說明:包含本文件前必須定義QUEUE_ELEMENT_TYPE,它表示隊列中元素的類型,還可定義隊列的大小QUEUE_MAX_SIZE,默認為// 64+1,由於隊列中始終要有一個空元素,所以實際最多可存64個元素。 /////////////////////////////////////////////////////////////////////////////////////////////////////#include <memory.h>#include <assert.h>#ifndef BOOLEAN#define BOOLEAN int#endif#ifndef TRUE#define TRUE 1#endif#ifndef FALSE#define FALSE 0#endif//循環隊列的大寸(最大尺寸) #ifndef QUEUE_MAX_SIZE#define QUEUE_MAX_SIZE 64+1#endif#define LOOPQUEUEASSERT assert(pLQ != 0 && pLQ->front >=0 && pLQ->rear >= 0 && QUEUE_MAX_SIZE > 1)struct LoopQueue{ QUEUE_ELEMENT_TYPE data[QUEUE_MAX_SIZE]; long front; long rear;};//初始化循環隊列 void LoopQueue_Init(LoopQueue *pLQ){ pLQ->front = 0; pLQ->rear = 0; LOOPQUEUEASSERT;}//判斷循環隊列是否為空 BOOLEAN LoopQueue_IsEmpty(LoopQueue *pLQ){ LOOPQUEUEASSERT; return pLQ->rear==pLQ->front; }//獲取循環隊列中存儲的元素的個數 long LoopQueue_Length(LoopQueue *pLQ){ LOOPQUEUEASSERT; return (pLQ->rear-pLQ->front+QUEUE_MAX_SIZE)%QUEUE_MAX_SIZE;}//入隊 void LoopQueue_In(LoopQueue *pLQ, QUEUE_ELEMENT_TYPE element){ LOOPQUEUEASSERT; if(pLQ->front==(pLQ->rear+1)%QUEUE_MAX_SIZE) { pLQ->rear=(pLQ->rear+1)%QUEUE_MAX_SIZE; pLQ->data[pLQ->rear] = element; pLQ->front=(pLQ->front+1)%QUEUE_MAX_SIZE; } else { pLQ->rear=(pLQ->rear+1)%QUEUE_MAX_SIZE; pLQ->data[pLQ->rear] = element; }}//出隊 BOOLEAN LoopQueue_Out(LoopQueue *pLQ, QUEUE_ELEMENT_TYPE* pElement){ LOOPQUEUEASSERT; if(LoopQueue_IsEmpty(pLQ)) return FALSE; pLQ->front=(pLQ->front+1)%QUEUE_MAX_SIZE; *pElement = pLQ->data[pLQ->front]; return TRUE;}本文來自CSDN博客 http://blog.csdn.net/yeyuboy/archive/2006/05/18/743414.aspx

㈤ c語言環形隊列 鏈表 和數組的區別

隊列先進先出 適合用於排序
鏈表適合用於存儲
C的數組就是指針 適合用於查詢

㈥ 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語言中循環隊列的隊滿和隊空的判斷條件各是什麼有什麼不同

隊空時: Q.front == Q.rear;

隊滿時: Q.front == (Q.rear + 1) % MAXSIZE;

front指向隊首元素,rear指向隊尾元素的下一個元素。

maxsize是隊列長度。

(7)李春葆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語言實現刪除環形隊列第K個元素

樓主你好。
我現在假設環形隊列一定可以找到第k個元素,如下:
void DeleteIndexedNode(DList* thiz, int k){//刪除第k個元素
DNode* iter=thiz->first;
DNode* pIter;
int index;//假設隊列從1開始編號
if(!iter)//隊列為空,取消刪除
return;
//若想繞一周不再刪除,上面可以if(!iter || k > thiz->length) return;//若隊列為空或超過一周,取消刪除
if( k == 1){//若刪除首個節點
thiz->first = iter->next;
thiz->last->next = thiz->first;//DList結構若不是雙向鏈表,應該有一個last指針,提高效率
DestroyDNode(iter);//這個是你自己定製的DNode的析構函數
return;
}
//若刪除其他節點
do{
pIter = iter;//pIter指向iter前一個節點,用於幫助析構。
iter = iter->next;
index++;
}while(index < k) ;//因為是環形隊列,肯定可以找到第k個元素,而且iter不會為NULL
pIter->next = iter->next;//iter的前一個節點的next繞過iter
DestroyDNode(iter);//這個是你自己定製的DNode的析構函數
return;
}
以上函數可以實現刪除第K個元素,有什麼問題可以再問我。

㈨ 有C語言基礎。李春葆主編的數據結構第四版。半個月能學好嗎以前沒學過的

數據結構沒這么好學的,如果你只是為了應付考試,那看一下相關的知識點,記住怎麼操作就好,如果你是想學好這個,建議多花點時間。

㈩ c語言循環隊列

隊列是一種特殊的線性表,循環隊列是將向量空間想像為一個首尾相接的圓環。

隊列是一個特殊的線性表,它的特殊之處在於它只允許表的前面的操作刪除,而在表的後面的操作插入,就像堆棧一樣,隊列100是一個線性表,具有有限的操作。

循環隊列就是把向量空間想像成一個首尾相連的環,把這樣的向量稱為循環向量。存儲學位的隊列稱為循環隊列。

在順序隊列中,當指向隊列末端的指針到達數組的上界時,不能有更多的隊列條目,但數組中仍然有一個空位置。這稱為「假溢出」。

(10)李春葆c語言環形隊列擴展閱讀:

判斷滿隊列狀態:

1.計數;你通常使用count

Count等於隊列的MAXSIZE

2.國旗int

Queueinflag=1Queueoutflag=0

= && flag = = 0的前面和後面

3.放一個存儲應答單元為空,不存儲數據

後面+1=前面

註:(不)順序結構,SeqQueuemyQueue;