顺序存储实现队列 循环队列 好麻烦
2013-08-19 18:51
393 查看
#ifndef QUEUE_H_INCLUDED
#define QUEUE_H_INCLUDED
//用动态数组实现队列 循环队列
#define Ini_size 3
#define Inc_size 1
typedef int elem;
struct newtype
{
elem *data;
int front;
int rear;
int size;
};
typedef struct newtype queue;
queue Initial(queue Q)
{
Q.data=(elem*)malloc(Ini_size*sizeof(elem));
Q.front=0;
Q.size=Ini_size;
Q.rear=Q.size-1;
return Q; /*认定front = rear = 0是空队列*/
}
int Full(queue Q) //在初始长度<3的时候 这个判定是不正确的
{
if((Q.rear+2)%Q.size==Q.front) return 1;
else return 0;
}
int Empty(queue Q)
{
if ((Q.rear+1)%Q.size==Q.front) return 1;
return 0;
}
queue EnQueue(queue Q,elem x)
{
if (Full(Q)) {printf("被调用\n");Q.data=(elem*)realloc(Q.data,(Q.size+Inc_size)*sizeof(elem));Q.size+=Inc_size;}
Q.rear=(Q.rear+1)%Q.size;
Q.data[Q.rear]=x;
return Q;
}
queue DeQueue(queue Q,elem*x)
{
if (Empty(Q))
{
printf("can't dequeue.queue is empty\n");
exit(0);
}
*x=Q.data[Q.front];
Q.front=(Q.front+1)%Q.size;
return Q;
}
void Print(queue Q)
{
int i,len;
if (Empty(Q)) printf("\nempty\n");
else
{
printf("\n");
len = (Q.rear-Q.front+Q.size)%Q.size+1;
for (i=0;i<len;i++)
printf("%d\t",Q.data[(Q.front+i)%Q.size]);
}
printf("\n");
}
#endif // QUEUE_H_INCLUDED
#define QUEUE_H_INCLUDED
//用动态数组实现队列 循环队列
#define Ini_size 3
#define Inc_size 1
typedef int elem;
struct newtype
{
elem *data;
int front;
int rear;
int size;
};
typedef struct newtype queue;
queue Initial(queue Q)
{
Q.data=(elem*)malloc(Ini_size*sizeof(elem));
Q.front=0;
Q.size=Ini_size;
Q.rear=Q.size-1;
return Q; /*认定front = rear = 0是空队列*/
}
int Full(queue Q) //在初始长度<3的时候 这个判定是不正确的
{
if((Q.rear+2)%Q.size==Q.front) return 1;
else return 0;
}
int Empty(queue Q)
{
if ((Q.rear+1)%Q.size==Q.front) return 1;
return 0;
}
queue EnQueue(queue Q,elem x)
{
if (Full(Q)) {printf("被调用\n");Q.data=(elem*)realloc(Q.data,(Q.size+Inc_size)*sizeof(elem));Q.size+=Inc_size;}
Q.rear=(Q.rear+1)%Q.size;
Q.data[Q.rear]=x;
return Q;
}
queue DeQueue(queue Q,elem*x)
{
if (Empty(Q))
{
printf("can't dequeue.queue is empty\n");
exit(0);
}
*x=Q.data[Q.front];
Q.front=(Q.front+1)%Q.size;
return Q;
}
void Print(queue Q)
{
int i,len;
if (Empty(Q)) printf("\nempty\n");
else
{
printf("\n");
len = (Q.rear-Q.front+Q.size)%Q.size+1;
for (i=0;i<len;i++)
printf("%d\t",Q.data[(Q.front+i)%Q.size]);
}
printf("\n");
}
#endif // QUEUE_H_INCLUDED
相关文章推荐
- 数据结构(C实现)------- 顺序队列(循环队列之少用一个存储空间实现) .
- 采用顺序存储实现循环队列的初始化、入队、出队操作。
- 循环队列-顺序存储-c语言实现
- 循环队列的顺序存储实现
- 循环队列-顺序存储-Java实现
- 队列顺序循环存储实现
- 循环队列 顺序存储 C实现
- C++实现循环队列之顺序存储
- 队列的顺序存储实现—循环队列
- 数据结构之循环队列(顺序表存储)——C++模板类实现
- 数据结构学习----顺序循环队列(Java实现)
- [置顶] 数据结构——循环队列存储结构以及实现
- 循环队列——队列的顺序表示和实现
- 数据结构学习笔记 --- 队列(循环队列-队列的顺序表示和实现)
- 顺序循环队列的c语言实现
- 队列-顺序存储-简单实现
- 链栈,顺序栈,单链队列,循环队列,非循环队列的简单实现
- 循环队列 队列的顺序表示和实现
- 队列的顺序实现(循环数组)与链式实现
- 数组实现顺序队列、顺序循环队列