c语言队列的操作

2025-04-12 06:22:49

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; D钽吟篑瑜ATA data; DATA *d锾攒揉敫ata1; 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。
猜你喜欢