C语言队的表示和实现。

队的操作与栈的操作类似,不同的是删除是在表头进行。
代码如下:
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);
}
发布了21 篇原创文章 · 获赞 10 · 访问量 2662

猜你喜欢

转载自blog.csdn.net/weixin_42199022/article/details/89477647