佇列:就是生活中的排隊,因此排隊是先到先得,也是先離開隊伍,因此佇列也是採用的先進先出的概念(fifo,慢慢想想作業系統裡面是不是也用到fifo,自己去查吧 到底有沒有)。如何能夠準確的定位是先進先出呢,因此採用的就是頭指標front和尾指標rear,通常這兩個指標是封裝成乙個鏈隊;注意front與rear是節點的資料型別哦~~~~~~
先來看看順序佇列吧:
#define maxsize
typedef struct
sequeue;
//定義乙個指向佇列的指標變數,並申請儲存空間
sequeue * sq = new sequeue;
//佇列的資料區域
sq->data[0] ~ sq->data[maxsize - 1];
//為空隊時:
sq->front = sq->rear = -1;
//入隊操作
sq->rear++;
sq->data[sq->rear] = x;
//出隊操作
sq->front++;
x = sq->data[sq->front]
但是上面的這種會出現一種現象,就是當乙個佇列又有出隊又有入隊時,出了隊的儲存空間不能再次作為入隊所需的儲存空間,這種就是本來對沒有滿,但是不能繼續入隊,這種現象就稱為
假溢位的現象;為了解決這種現象,因此提出了迴圈佇列,也就是將出了隊的空間再次利用作為新入隊元素的所需空間。
到底應該如何才可以將隊迴圈呢?
其實就是尾指標與頭指標進行迴圈加1
//入隊
sq->rear = (sq->rear + 1)%maxsize;
//出隊
sq->front = (sq->front + 1)%maxsize;
但是這種做法就會出現另外乙個問題,那就是隊列為nul和滿隊時都是sq->rear = sq - >front;這樣就傻傻的分不清楚到底是哪種情況。
解決方案:
1:就是犧牲乙個儲存空間,讓這個空間不儲存東西,此時滿隊的條件就是(rear + 1)%maxsize = font;
2:就是定義個變數標識,當標識等於0表示空佇列,等於maxsize表示隊滿。
鏈隊:
typedef struct node
qnode; //鏈隊節點型別
typedef struct
lqueue;
//帶頭結點的佇列
lqueue * init_lqueue()
//入隊操作
void push_queue(lqueue * head, int value)
//判斷隊是否是空
int empty_queue(lqueue * head)
else
return 0;
}//出隊操作
void pop_queue(lqueue * head, int * returnvalue)
}
面試題1:
如果按照index訪問item並就地插入或刪除資料,這種操作比較繁瑣,那使用什麼節構最節省時間? a
a. sequential list順序表(陣列)
b. double linked list(雙向鍊錶)
c. double linked list with header pointer(單獨儲存head指標的雙向鍊錶)
d. linked list(鍊錶)
面試題2:程式設計實現佇列的入隊和出隊操作
typedef struct student
node;
typedef struct linkqueue
queue;
//佇列的入隊(這是不帶頭結點的操作)
queue * insert(queue * hq, int x)
else
return hq;
}//出隊
queue * del(queue * hq, int * x)
else
else
}return hq;
}
哎~~~,身心疲憊啊~~~~~~~~
資料結構 佇列 queue
佇列 queue 是一種採用先進先出 fifo 策略的抽象資料結構,它的想法來自於生活中排隊的策略。顧客在付款結賬的時候,按照到來的先後順序排隊結賬,先來的顧客先結賬,後來的顧客後結賬。同棧的實現一樣,佇列的實現也有陣列實現和鍊錶實現兩種方式。先來看看陣列實現的方法。棧使用top變數記錄棧頂的位置,...
資料結構 佇列queue
佇列 佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端 front 進行刪除操作,而在表的後端 rear 進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列是有序集合,新新增的一端為隊尾,另一端為隊頭,當乙個元素從隊尾進入佇列時,一直...
資料結構之佇列(Queue)
佇列,顧名思義,也就是一條隊伍,進入隊伍的時候,只能從隊尾排隊,離開隊伍的時候,只能從隊首離開。佇列也有陣列實現和鏈式實現。用一般陣列實現佇列的時候,入隊,則在隊尾插入乙個元素,出隊,則將隊首的元素出隊。那麼,由於陣列的長度是固定的,入隊只能從隊尾入隊,因此經常性的出隊會使得隊首越來越靠近隊尾,隊首...