資料結構 隊列 c

來源:互聯網
上載者:User

 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define QUEUELEN 15

typedef struct
{
    char name[10];
    int age;
}DATA;

typedef struct
{
    DATA data[QUEUELEN];
    int head;
    int tail;
}SQType;

SQType *SQTypeInit()
{
    SQType *q;
    if(q=(SQType *)malloc(sizeof(SQType)))
    {
        q->head=0;
        q->tail=0;
        return q;
    }
    else
    {
        return NULL;
    }
}

int SQTypeIsEmpty(SQType *q)
{
    int temp;
    temp=q->head==q->tail;
    return temp;
}

int SQTypeIsFull(SQType *q)
{
    int temp;
    temp=q->tail==QUEUELEN;
    return temp;
}

void SQTypeClear(SQType *q)
{
    q->head=0;
    q->tail=0;
}

void SQTypeFree(SQType *q)
{
    if(q)
    {
        free(q);
    }
}

int InSQType(SQType *q,DATA data)
{
    if(q->tail==QUEUELEN)
    {
        printf("隊列已滿!操作失敗!\n");
        return 0;
    }
    else
    {
        q->data[q->tail++]=data;
        return 1;
    }
}

DATA *OutSQType(SQType *q)
{
    if(q->head==q->tail)
    {
        printf("隊列已空!操作失敗!\n");
        exit(0);
    }
    else
    {
        return &(q->data[q->head++]);
    }
}

DATA *PeekSQType(SQType *q)
{
    if(SQTypeIsEmpty(q))
    {
        printf("隊列空!\n");
        return NULL;
    }
    else
    {
        return &(q->data[q->head]);
    }
}

int SQTypeLen(SQType *q)
{
    int temp;
    temp=q->tail-q->head;
    return temp;
}

int main()
{
    SQType *queue;
    DATA data;
    DATA *data1;

    queue=SQTypeInit();
    printf("入隊列操作:\n");
    printf("輸入 姓名 年齡 進行入隊列操作:\n");
    do
    {
        scanf("%s%d",data.name,&data.age);
        if(strcmp(data.name,"0")==0)
        {
            break;
        }
        else
        {
            InSQType(queue,data);
        }
    }while(1);

    do
    {
        printf("出隊列操作:按任意鍵進行出隊列操作:\n");
        getchar();
        data1=OutSQType(queue);
        printf("出隊列的資料是(%s,%d)\n",data1->name,data1->age);
    }while(1);

    SQTypeFree(queue);
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.