使用数组实现双端队列
2013-02-28 16:12
501 查看
#include <stdio.h>
#include <stdlib.h>
struct QueueNode
{
int front;
int rear;
int capacity;
int count;
char *arrayItem;
};
typedef struct
QueueNode* Queue;
void QueueInital(int aMaxEelement);
void QueuePushFront(char aElement);
char QueuePopFront();
void QueQueuePushRear(char aElement);
char QueuePopRear();
void QueueFree();
#include "DoubleQueue.h"
static
Queue queue;
static char* Isempty =
"\nqueue is empty";
static char* isFull =
"\nqueue is full";
void QueueInital(int aMaxEelement)
{
queue = malloc(sizeof(*queue));
if (!queue)
{
printf("create Queue failed!!!!");
return;
}
queue->capacity = aMaxEelement;
queue->arrayItem =
malloc(sizeof(char)*aMaxEelement);
if (!(queue->arrayItem))
{
printf("create array failed!!!!");
return;
}
queue->count =
0;
queue->front =
0;
queue->rear = aMaxEelement-1;
}
static
int IsEmpty()
{
return queue->count ==
0;
}
static
int IsFull()
{
return
queue->count ==
queue->capacity;
}
static
int add(int aIndex)
{
if (aIndex >= queue->capacity)
{
aIndex =
0;
}
return aIndex;
}
static
int minus(int aIndex)
{
if (aIndex < 0)
{
aIndex =
queue->capacity -1;
}
return aIndex;
}
void QueuePushFront(char aElement)
{
if (IsFull())
{
printf("%s",isFull);
return;
}
queue->arrayItem[queue->front++] = aElement;
queue->front =
add(queue->front);
queue->count++;
}
char QueuePopFront()
{
if (IsEmpty())
{
printf("%s",Isempty);
return 0;
}
queue->front =
minus(--queue->front);
--queue->count;
return
queue->arrayItem[queue->front];
}
void QueQueuePushRear(char aElement)
{
if (IsFull())
{
printf("%s",isFull);
return;
}
queue->arrayItem[queue->rear--] = aElement;
queue->rear =
minus(queue->rear);
queue->count++;
}
char QueuePopRear()
{
if (IsEmpty())
{
printf("%s",Isempty);
return 0;
}
queue->rear =
add(++queue->rear);
--queue->count;
return
queue->arrayItem[queue->rear];
}
void QueueFree()
{
free(queue->arrayItem);
free(queue);
}
#include <stdlib.h>
struct QueueNode
{
int front;
int rear;
int capacity;
int count;
char *arrayItem;
};
typedef struct
QueueNode* Queue;
void QueueInital(int aMaxEelement);
void QueuePushFront(char aElement);
char QueuePopFront();
void QueQueuePushRear(char aElement);
char QueuePopRear();
void QueueFree();
#include "DoubleQueue.h"
static
Queue queue;
static char* Isempty =
"\nqueue is empty";
static char* isFull =
"\nqueue is full";
void QueueInital(int aMaxEelement)
{
queue = malloc(sizeof(*queue));
if (!queue)
{
printf("create Queue failed!!!!");
return;
}
queue->capacity = aMaxEelement;
queue->arrayItem =
malloc(sizeof(char)*aMaxEelement);
if (!(queue->arrayItem))
{
printf("create array failed!!!!");
return;
}
queue->count =
0;
queue->front =
0;
queue->rear = aMaxEelement-1;
}
static
int IsEmpty()
{
return queue->count ==
0;
}
static
int IsFull()
{
return
queue->count ==
queue->capacity;
}
static
int add(int aIndex)
{
if (aIndex >= queue->capacity)
{
aIndex =
0;
}
return aIndex;
}
static
int minus(int aIndex)
{
if (aIndex < 0)
{
aIndex =
queue->capacity -1;
}
return aIndex;
}
void QueuePushFront(char aElement)
{
if (IsFull())
{
printf("%s",isFull);
return;
}
queue->arrayItem[queue->front++] = aElement;
queue->front =
add(queue->front);
queue->count++;
}
char QueuePopFront()
{
if (IsEmpty())
{
printf("%s",Isempty);
return 0;
}
queue->front =
minus(--queue->front);
--queue->count;
return
queue->arrayItem[queue->front];
}
void QueQueuePushRear(char aElement)
{
if (IsFull())
{
printf("%s",isFull);
return;
}
queue->arrayItem[queue->rear--] = aElement;
queue->rear =
minus(queue->rear);
queue->count++;
}
char QueuePopRear()
{
if (IsEmpty())
{
printf("%s",Isempty);
return 0;
}
queue->rear =
add(++queue->rear);
--queue->count;
return
queue->arrayItem[queue->rear];
}
void QueueFree()
{
free(queue->arrayItem);
free(queue);
}
相关文章推荐
- PHP使用数组实现队列
- 循环队列拾遗-使用数组实现循环队列
- java使用数组实现优先级队列
- (第7讲)利用双向链表实现双端队列、优先级队列(有序数组实现、有序链表实现)
- 使用数组实现队列
- 数据结构循环队列,数组实现,循环队列中如果不使用数据项计数字段items,而是通过front和rear计算队列是否为空或满或队列个数,那会很复杂
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- Java中队列的实现(1)-使用顺序存储结构(数组)以及实现
- 数据结构——使用双端链表实现队列(java实现)
- 循环队列Queue--使用顺序存储结构(数组)实现
- 多线程与双端队列结合使用,实现持久化任务(1)
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- C语言使用数组实现简单队列
- PHP使用数组实现队列(实际就是先进先出如何实现)
- Java语言使用数组实现队列
- 使用数组实现固定长度的队列结构
- 多线程与双端队列结合使用,实现持久化任务(3)
- 使用数组实现队列
- PHP使用数组实现队列(实际就是先进先出怎样实现)
- java使用数组实现顺序队列