c语言数据结构中循环队列操作,包括初始化,创建,清空销毁,增添,删除,求队长,遍历等等

数据机构中循环队列的九个基本操作,建立c项目,用两个头文件和一个源代码主函数组成,已在编译器上运行过,成功!


头文件一:基本头文件、定义等

#include"stdlib.h"
#include"stdio.h"
#define MAXQSIZE 100
#define OK 1
#define ERROR -1
#define TURE 1
#define FALSE 0
#define OVERFLOW -1


typedef int QElemType;
typedef int Status;
typedef struct {
QElemType *base;
int front;
int rear;
}SqQueue;


头文件二:包含头文件一,循环队列的基本操作

#include"header.h"

Status InitQueue(SqQueue &Q)//初始化
{
Q.base=(QElemType *)malloc(MAXQSIZE*sizeof(QElemType));
if(!Q.base)
exit(OVERFLOW);
Q.front=Q.rear=0;
return OK;
}

void DstoryQueue(SqQueue &Q)//销毁
{
while ( Q.front!= Q.rear)
{
  free(&Q.base[Q.front]);
  Q.front=(Q.front+1)%MAXQSIZE;
}
}

void  ClearQueue(SqQueue &Q)//清空
{  int i=Q.front;
   while (i != Q.rear)
   {
   i=0;
   i++;
   }
   Q.front=Q.rear=0;
}


Status QueueEmpty(SqQueue &Q)//判空
{
if(Q.front==Q.rear) 
return TURE;
return FALSE;
}


Status QueueLength(SqQueue Q)//求队长
{
 return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}


Status GetHead(SqQueue &Q)//取首元素
{  QElemType e;
 if(Q.front==Q.rear)
   return ERROR;
 return e=Q.base[Q.front];
}


Status EnQueue(SqQueue &Q,QElemType e)
{
   if((Q.rear+1)%MAXQSIZE==Q.front)
     return ERROR;
   Q.base[Q.rear]=e;
   Q.rear=(Q.rear+1)%MAXQSIZE;
   return Q.base[Q.rear-1];
}


Status DeQueue(SqQueue &Q)
{   
    QElemType e;
    if(Q.front==Q.rear)
     return ERROR;
    e=Q.base[Q.front];
    Q.front=(Q.front+1)%MAXQSIZE;
    return e;
}


void QueueTraver(SqQueue &Q)
{   
    int i=Q.front;
    while (i!=Q.rear)
     {
      printf("%5d",Q.base[i]); 
      i++;
     }    
}


void CreatQueue(SqQueue &Q)
{
  int n;
  printf("请输入循环队列的长度:");
  scanf_s("%d",&n);
  for (int i = 1; i <=n; i++)
  {
 printf("第%d个元素为:",i);
 scanf_s("%d",&Q.base[Q.rear]);
 Q.rear=(Q.rear+1)%MAXQSIZE;
  }
}


主函数:包含头文件二、对基本操作的测试


#include "stdafx.h"
#include"header1.h"




int main()
{   int a;
    SqQueue Q;
InitQueue(Q);//初始化调试
printf("准备测试队列操作....\n\n");
CreatQueue(Q);//创建循环队列
printf("\n\n");
printf("队列长度为:%d", QueueLength(Q));//求队长
printf("\n\n");
if(QueueEmpty(Q)==0)
printf("队列不空!");
else
printf("队列为空!");
printf("\n\n队列中的元素为:");
QueueTraver(Q);//遍历调试
printf("\n\n");
printf("首元素为:%d", GetHead(Q));//取首元素
printf("\n\n");
printf("删除队头元素:%d", DeQueue(Q));//删除
printf("\n\n剩下元素为:");
QueueTraver(Q);//遍历调试
printf("\n\n");
printf("请输入要添加的元素:");
scanf_s("%d",&a);
printf("\n\n你要添加的元素为:%d", EnQueue(Q,a));
printf("\n\n剩下元素为:");
QueueTraver(Q);//遍历调试
ClearQueue(Q);
DstoryQueue(Q);
    return 0;
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值