c语言队列的操作

2025-12-29 22:32:58

1、//头文件

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define QUEUELEN 15

2、//必要的数据准备

//例如,我们要存一个姓名和年龄的结构

typedef struct

{

    char name[10];

    int age;

}DATA;

//我们创建这样结构体来表示队列

typedef struct{

    DATA data[QUEUELEN];

    int head;

    int tail;

}SQType;

3、//队列的初始化

SQType *SQTypeInit()

{

    SQType *q;

    if(q=(SQType *)malloc((sizeof(SQType))))

    {

        q->head=0;

        q->tail=0;

        return q;

    }

    else

        return NULL;

}

4、//显然的,如果头和尾相等,那么这个队列里没有数据

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);

}

5、//如果这是对于队列的清空,但是队列还存在在内存中

//我们需要对队列进行在内存中的清除

void SQTypeClear(SQType *q)

{

    q->head=0;

    q->tail=0;

}

//这是收回 赋予队列的地址

void SQTypeFree(SQType *q)

{

    if(q!=NULL)

    {

        free(q);

    }

}

6、//进队列

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队列已空!操作失败!\n");

        exit(0);

    }

    else{

        return &(q->data[q->head++]);

    }

}

//我们需要偷看一下队头的数据

DATA *PeekSQType(SQType *q)

{

    if(SQTypeIsEmpty(q))

    {

        printf("\n空队列!\n");

        return NULL;

    }

    else

    {

        return &(q->data[q->head]);

    }

}

//返回队列长度

int SQTypeLen(SQType *q)

{

    int temp;

    temp=q->tail-q->head;

    return temp;

}

7、//我们最熟悉和最喜欢的main函数

int main()

{

    SQType *stack;

    DATA data;

    DATA *data1;

    stack=SQTypeInit();

    printf("入队列操作:\n");

    printf("输入姓名 年龄进行入队列操作:");

    do

    {

        scanf("%s%d",data.name,&data.age);

        if(strcmp(data.name,"0")==0)

        {

            break;

        }

        else{

            InSQType(stack,data);

        }

    }while(1);

    do{

        printf("出队列操作:按任意键进行出栈操作:\n");

        getchar();

        data1=OutSQType(stack);

        printf("出队列的数据是(%s,%d)",data1->name,data1->age);

    }while(1);

    SQTypeFree(stack);

    return 0;

}

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢