您的位置:首页 > 理论基础 > 数据结构算法

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

2016-11-02 19:56 567 查看
数据机构中循环队列的九个基本操作,建立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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐