c语言char operation,C语言队的表示和实现 - Stormchar的个人空间 - OSCHINA - 中文开源技术交流社区...

队的操作与栈的操作类似,不同的是删除是在表头进行。

代码如下:

head.h

#include

#include

#include

#include

#include

#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;irear;i++){

printf("姓名:%s ",Q->base[i].name);

printf("性别:%s",Q->base[i].sex);

printf("\n\n");

}

printf("\n");

}

主函数

#include "head.h"

int main()

{

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

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值