隊列是數據結構中比較常見的,跟時間有關的通常和隊列有關係。數組
隊列的實現有不少如數隊(數組實現)、鏈隊(鏈表實現的)。數隊又分不一樣的實現,每種實現都有本身的缺點。這裏是最普通的一種,瞭解隊列的結構。下面是數隊的一種實現,先看實現:數據結構
#include<stdio.h> #include<malloc.h> //結構 typedef struct QU{ int *base;//1 int rear;//2 int size;//3 } QU, *QUECE; QUECE init(){ QUECE queue; queue->base = (int *)malloc(10*sizeof(int)); queue->rear = 0; queue->size = 10; return queue; } void en(QUECE queue, int e){ if(queue->rear-1 == queue->size)//4 exit(-1); queue->base[queue->rear] = e;//5 queue->rear = queue->rear+1;//6 } int de(QUECE queue){ int e; int i; e = queue->base[0];//7 if(queue->rear == 0)//8 exit(-1); for(i=1;i<queue->rear;i++){//9 queue->base[i-1] = queue->base[i]; } queue->rear--; return e; } int main(void){ QUECE queue; queue = init(); int i; for(i=0;i<11;i++){ en(queue, i); } for(i=0;i<11;i++){ printf("%d\n", de(queue)); } return 0; }
1---數隊的基止;spa
2--- 數隊的尾指針,由於數組能夠經過下標訪問元素,因此是整型下標就能夠。指針
3---分配的空間大小。入隊時先判斷是否滿。code
4---判斷數隊是否滿。對象
5---在隊尾插入數據,賦值。隊列
6---隊尾指針後移一位。it
7---保存刪除的隊頭元素,做爲返回對象。io
8---判斷數隊是否爲空,爲空退出。class
9--- 數隊刪除隊頭後,一個一個往前移動。(缺點)
主程序;main()是先入隊1-10,在出隊1-10;結果顯示:
注意:此結構由於是隊頭位置一直保持不變,因此不須要構件隊頭指針,只須要隊尾指針。缺點就是在出隊的時候要一個一個往前移動,效率很低。後面還有一個結構是構件對頭指針。