1. 程式人生 > >領卓教育:C語言的資料結構------佇列

領卓教育:C語言的資料結構------佇列

本文章適合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;
}

個人總結,歡迎指正。