數組實現隊列結構:
相對棧結構要難搞一些,隊列的先進先出的,需要一個數組和三個變量,size記錄已經進來了多少個元素,不需要其它萌新看不懂的知識。
觸底反彈,頭尾追逐的感覺。
循環使用數組。
具體解釋一下觸底反彈:當我們的隊頭已經到了數組的底,我們就把對頭設為數組的第一個元素,對于隊尾也是一樣。實現了對數組的循環使用。
#include<stdio.h>
#include<stdbool.h>
#define maxsize 10
typedef int datatype;
typedef struct queue
{datatype arr[maxsize];int a,b,size;//頭、尾、數量
}queue;
queue s;
void init()//初始化
{s.a=0;s.b=0;s.size=0;
}
int Empty()//判空
{if(s.size==0)return 1;return 0;
}
int full()//判滿
{if(s.size==maxsize)return 1;return 0;
}
datatype peek()//查看隊頭
{if(s.size!=0)return s.arr[s.a];printf("queue is null\n");
}
datatype poll()//彈出隊頭
{int temp=s.a;if(s.size!=0){s.size--;s.a=s.a==maxsize-1? 0 :s.a+1;//觸底反彈return s.arr[temp];}printf("queue is null\n");
}
int push(datatype obj)//放入隊尾
{if(s.size!=maxsize){s.size++;s.arr[s.b]=obj;s.b=s.b==maxsize-1? 0 : s.b+1;//觸底反彈return 1;}printf("queue is full\n");return 0;
}
//測試
int main()
{int i;init();if(Empty())printf("null\n");for(i=0;i<20;i++)push(i);while(!Empty()){printf("%d\n",poll());}printf("%d",poll());
}
?