队的操作与栈的操作类似,不同的是删除是在表头进行。
代码如下:
head.h
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<malloc.h>
#define MaxSize 25
#define ERROR 0
typedef struct{
char name[8];
char sex[4]; //一个汉字占两个字符
}QElemType;
typedef struct{
QElemType*base;
int fron;
int rear;
}SqQueue;
QElemType*GetHead(SqQueue*Q);
int InitQueue(SqQueue*Q);
int DestoryQueue(SqQueue*Q);
int QueueEmpty(SqQueue*Q);
int QueueLength(SqQueue*Q);
int InsertQueue(SqQueue*Q,QElemType e);
int DeleteQueue(SqQueue*Q);
void PrintQueue(SqQueue*Q);
operation.c(操作集)
#include"head.h"
int InitQueue(SqQueue*Q)
{
int i=0;
Q->base=(QElemType*)malloc(sizeof(QElemType)*MaxSize);
if(!Q->base) exit(-1);
Q->fron=Q->rear=0; //初始化
//将文本导入队中
FILE *fp;
fp =fopen("ks.txt","r");
if((fp=fopen("ks.txt","r"))==NULL)
{
printf("can't open the file!!!\n");
printf("error:%s\n",strerror(errno));
exit(0);
}
while(!feof(fp))
{
fscanf(fp,"%s%s",Q->base[i].name,Q->base[i].sex);
i++;
Q->rear++;
}
fclose(fp);
}
int DestoryQueue(SqQueue*Q)
{
Q->base = NULL;
Q->rear = 0;
Q->fron = 0;
free(Q->base);
return 0;
}
QElemType*GetHead(SqQueue*Q)
{
if(Q->fron!=Q->rear)
return &(Q->base[Q->fron]);
}
int QueueLength(SqQueue*Q)
{
return (Q->rear-Q->fron+MaxSize)%MaxSize;
}
int QueueEmpty(SqQueue*Q)
{
if(Q->fron==Q->rear) printf("队为空\n\n");
else printf("队不为空\n\n");
return 0;
}
int InsertQueue(SqQueue*Q,QElemType e)
{
if((Q->rear+1)%MaxSize==Q->fron)
return ERROR;
Q->base[Q->rear]=e;
Q->rear=(Q->rear+1)%MaxSize;
return 0;
}
int DeleteQueue(SqQueue*Q)
{
if(Q->fron==Q->rear) return ERROR;
Q->fron=(Q->fron+1)%MaxSize;
return 0;
}
void PrintQueue(SqQueue*Q){
int i;
for(i=Q->fron;i<Q->rear;i++){
printf("姓名:%s ",Q->base[i].name);
printf("性别:%s",Q->base[i].sex);
printf("\n\n");
}
printf("\n");
}
主函数
#include "head.h"
int main()
{ //最好将主函数写成switch语句的形式,为什么我不写呢,因为我懒所以我没写了
SqQueue Q;
QElemType e,*k;
int a;
InitQueue(&Q);
printf("+++++++++++++++++++文本元素入队++++++++++++++++++++++++\n");
PrintQueue(&Q);
printf("队尾插入\n");
printf("姓名:");
scanf("%s",e.name);
printf("性别:");
scanf("%s",e.sex);
InsertQueue(&Q, e);//入队
printf("\n");
PrintQueue(&Q);
printf("删除队头\n");
DeleteQueue(&Q);//出队
printf("\n");
PrintQueue(&Q);
printf("取队头元素\n");
k=GetHead(&Q);
printf("姓名: %s ",k->name);
printf("性别: %s\n\n",k->sex);
printf("求队列长度\n");
a=QueueLength(&Q);
printf("队列长度为%d\n\n",a);
printf("判断队列是否为空\n");
QueueEmpty(&Q);
printf("操作执行完毕,销毁队列\n");
DestoryQueue(&Q);
}