領卓教育:C語言的資料結構------佇列
阿新 • • 發佈:2018-12-19
本文章適合C語言佇列的初學者,下面粉線一下我對對壘的初步理解。
1.佇列含義:
佇列是一種操作受限的線性表,其限制條件為允許在表的一端進行插入,而在表的另一端進行刪除。插入的一端叫做隊尾,刪除的一端叫做隊頭。向佇列中插入新元素的行為稱為進隊,從佇列中刪除元素的行為稱為出隊。進而就有一系列的佇列的入隊出隊 。 舉個例子:軍訓的時候,都排成一列,有頭有尾。假設你遲到了,只能站到最後面一個,退場的時候,都是由第一個先走的。遲到相當於對壘的入隊,退場相當於隊列出隊。
2.佇列的特點:
1.先進先出,後進後出 2.佇列的頭和尾相等表示佇列為空 3.佇列的頭和尾相差N-1 表示佇列為滿 下面盜用一張圖片(frout表示對頭,rear表示隊尾)
3.下面介紹佇列的入隊出隊
佇列的結構體的定義
typedef struct
{
int data[N] ;
int front,rear;
}sequeue_t ;
建立一個空佇列
sequeue_t * create_empty_sequeue(void)
{
sequeue_t * s = (sequeue_t*) malloc(sizeof(sequeue_t) ) ;
s->front = s->rear = 0;
memset(s->data,0,N) ;
return s;
}
判斷佇列的空和滿
int sequeue_is_empty(sequeue_t * s) //判斷佇列是否為空 { return (s->front == s->rear)?1:0; } int sequeue_is_full(sequeue_t * s) //判斷佇列是否為滿 { return abs(s->rear - s->front) == N-1 ?1:0; }
佇列的入隊
int sequeue_enqueue(sequeue_t * s,int value) { int ret ; if(sequeue_is_full(s)) { printf("sequeue is full\n"); return -1; } else { s->rear = s->rear %(N-1); s->data[s->rear] = value; s->rear ++; } return 0; }
佇列的出隊
int sequeue_dequeue(sequeue_t * s,int *pvalue)
{
if(sequeue_is_empty(s))
{
printf("sequeue is empty\n");
return -1;
}
else
{
s->front = s->front %(N-1);
*pvalue = s->data[s->front] ;
s->front ++;
}
return 0;
}
main函式
int main()
{
int i,value;
sequeue_t * SQ = create_empty_sequeue(); //建立一個空佇列
for(i=0;i<N;i++)
{
printf("%3d",i);
sequeue_enqueue(SQ,i); //入隊
}
printf("\n");
for(i=0;i<N;i++)
{
sequeue_dequeue(SQ,&value); //出隊
printf("%3d",value);
}
printf("\n");
return 0;
}
個人總結,歡迎指正。