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;
}
头文件一:基本头文件、定义等
#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;
}
相关文章推荐
- 数据结构中循环队列的清空、销毁、求队长、遍历、取首元素等操作及运用
- 数据结构中顺序栈的基本函数运用,包括创建空栈,初始化,清空,销毁,增加,删除,遍历等函数
- 单向循环链表创建、遍历、插入、删除、查找(按位置,按元素值)、清空、销毁
- 【数据结构】用C++实现双循环链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)
- 数据结构 线性链表的创立及其基本操作初始化、遍历、销毁、判空、求表长、删除、插入等
- c之队列相关操作------初始化,入队,出队,队列清空,销毁,遍历
- 【数据结构】用C++实现单循环链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)
- 【数据结构】用C++编写队列及基本操作(包括插入,出队列,摧毁,清空等等)
- 数据结构顺序表的操作全集(创建,遍历,插入,删除,排序等等)
- 栈的操作(创建,入栈,出栈,清空,遍历等等)
- 循环队列的操作(初始化,入队,出对,销毁,输出)
- 【数据结构】用C++实现顺序表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)
- 【数据结构】用C语言实现顺序表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)
- 单链表的创建、初始化、插入、删除 、输出、求表长、清空、查找操作
- 数据结构线性表之顺序表的基本操作插入、删除、遍历、初始化
- 顺序队列的创建、初始化、判断空、入队、出队、读取队头元素、置空、求队长操作
- 【数据结构】用C++实现双链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)
- 链表的基础操作总结(链表创建,插入,删除,遍历等等)
- 写给初学数据结构的同学之(循环双链表基本操作,创建,插入,删除,排序)
- 数据结构二叉树的java实现,包括二叉树的创建、搜索、删除和遍历