队列ADT实现
2011-12-29 23:35
260 查看
队列也比较的简单,先进先出。流行的做法也是用数组实现。
结构体如下:
struct Queue
{
int capacity;
int front;
int rear;
int size;
int *num;
};
直接上参考代码了:
#include<stdio.h>
#include<stdlib.h>
struct Queue
{
int capacity;
int front;
int rear;
int size;
int *num;
};
typedef struct Queue queue;
/*创建一个空的队列
形参代表这个队列的长度最大是多少*/
queue *createQueue(int capacity)
{
queue *Q = (queue*)malloc(sizeof(queue));
Q->capacity=capacity;
Q->front = Q->rear =0;
Q->size=0;
Q->num=(int*)malloc(sizeof(int)*capacity);
return Q;
}
/*判断一个队列是否为空
为空的话返回1,否则返回0*/
int isEmpty(queue* Q)
{
return Q->size==0?1:0;
}
/*判断一个队列是否为满
满的话返回1,否则返回0*/
int isFull(queue*Q)
{
return Q->size==Q->capacity?1:0;
}
/*入队*/
void inQueue(int x, queue* Q)
{
if(isFull(Q))
{
printf("Queue is full\n");
exit(1);
}
Q->size++;
Q->num[Q->rear++]=x;
if(Q->rear ==Q->capacity)
Q->rear=0;//使用循环数组方式
}
/*出队
返回元素的值*/
int outQueue(queue *Q)
{
int temp;
if(isEmpty(Q))
{
printf("Queue is empty\n");
exit(1);
}
temp=Q->num[Q->front];
Q->size--;
Q->front++;
if(Q->front==Q->capacity)
Q->front=0;
return temp;
}
/*释放队列所占的空间*/
void deleteQueue(queue* Q)
{
if(Q!=NULL)
{
free(Q->num);
free(Q);
}
}
结构体如下:
struct Queue
{
int capacity;
int front;
int rear;
int size;
int *num;
};
直接上参考代码了:
#include<stdio.h>
#include<stdlib.h>
struct Queue
{
int capacity;
int front;
int rear;
int size;
int *num;
};
typedef struct Queue queue;
/*创建一个空的队列
形参代表这个队列的长度最大是多少*/
queue *createQueue(int capacity)
{
queue *Q = (queue*)malloc(sizeof(queue));
Q->capacity=capacity;
Q->front = Q->rear =0;
Q->size=0;
Q->num=(int*)malloc(sizeof(int)*capacity);
return Q;
}
/*判断一个队列是否为空
为空的话返回1,否则返回0*/
int isEmpty(queue* Q)
{
return Q->size==0?1:0;
}
/*判断一个队列是否为满
满的话返回1,否则返回0*/
int isFull(queue*Q)
{
return Q->size==Q->capacity?1:0;
}
/*入队*/
void inQueue(int x, queue* Q)
{
if(isFull(Q))
{
printf("Queue is full\n");
exit(1);
}
Q->size++;
Q->num[Q->rear++]=x;
if(Q->rear ==Q->capacity)
Q->rear=0;//使用循环数组方式
}
/*出队
返回元素的值*/
int outQueue(queue *Q)
{
int temp;
if(isEmpty(Q))
{
printf("Queue is empty\n");
exit(1);
}
temp=Q->num[Q->front];
Q->size--;
Q->front++;
if(Q->front==Q->capacity)
Q->front=0;
return temp;
}
/*释放队列所占的空间*/
void deleteQueue(queue* Q)
{
if(Q!=NULL)
{
free(Q->num);
free(Q);
}
}
相关文章推荐
- 以循环顺序表实现的队列ADT(C语言版)
- python数据结构学习笔记-2016-11-05-01-队列ADT及其实现
- C_栈和队列(ADT)-队列的非循环(带头指针)顺序表示和实现
- C_栈和队列(ADT)-栈的表示和实现
- C_栈和队列(ADT)-队列的非循环(无头指针)顺序表示和实现
- 利用无序数组实现优先队列并排序数组——ADT实现
- ADT双端队列的实现
- 数据结构-->队列的链式实现 ADT
- 链式队列ADT实现(C语言)2018.3.14
- 循环队列ADT实现(C++)2018.3.15
- C_栈和队列(ADT)-队列的链式表示和实现
- 队列(Queue ADT)C语言实现
- 队列ADT的两种简单实现
- 数据结构-->(循环)队列 【队列的顺序实现】ADT
- 关于线程池实现思考——分离任务队列与线程池
- 一步一步学数据结构之1--1(队列--线性表实现--不存在循环)
- Java多线程与并发应用-(10)-java阻塞队列实现ArrayBlockingQueue
- 面试题7:用两个栈实现队列
- 剑指offer——用两个栈实现队列
- 3.4 表、栈和队列_队列ADT