标签:




c语言(数组)
#ifndef _QUEUE_H_
#define _QUEUE_H_
#include <malloc.h>
#define TRUE 1
#define FALSE 0
#define ACTION_IN 0
#define ACTION_OUT 1
typedef unsigned char boolean;
typedef struct QUEUE{
USER_TYPE *data;
int maxRoom;
int head;
int tail;
boolean lastAction;
} QUEUE;
boolean initQueue(QUEUE **queue, int maxRoom);
void destoryQueue(QUEUE **queue);
boolean isQueueEmpty(QUEUE queue);
boolean isQueueFull(QUEUE queue);
boolean QueueIn(QUEUE *queue, USER_TYPE value);
boolean QueueOut(QUEUE *queue, USER_TYPE *value);
boolean readHead(QUEUE queue, USER_TYPE *value);
boolean readHead(QUEUE queue, USER_TYPE *value){
if(isQueueEmpty(queue))
return FALSE;
*value = queue.data[queue.head];
return TRUE;
}
boolean QueueOut(QUEUE *queue, USER_TYPE *value){
if(!queue)
return FALSE;
if(isQueueEmpty(*queue))
return FALSE;
*value = queue->data[queue->head];
queue->head = (queue->head+1) % queue->maxRoom;
queue->lastAction = ACTION_OUT;
return TRUE;
}
boolean QueueIn(QUEUE *queue, USER_TYPE value){
if(!queue)
return FALSE;
if(isQueueFull(*queue))
return FALSE;
queue->data[queue->tail] = value;
queue->tail = (queue->tail+1) % queue->maxRoom;
queue->lastAction = ACTION_IN;
return TRUE;
}
boolean isQueueFull(QUEUE queue){
return queue.lastAction == ACTION_IN && queue.head == queue.tail;
}
boolean isQueueEmpty(QUEUE queue){
return queue.lastAction == ACTION_OUT && queue.head == queue.tail;
}
void destoryQueue(QUEUE **queue){
if(*queue == NULL)
return;
if((*queue)->data)
free((*queue)->data);
free(*queue);
*queue = NULL;
}
boolean initQueue(QUEUE **queue, int maxRoom){
if(*queue)
return FALSE;
if(maxRoom <= 0)
return FALSE;
if( (*queue = (QUEUE *)malloc(sizeof(QUEUE))) == NULL )
return FALSE;
if ( ((*queue)->data = (USER_TYPE *)malloc(sizeof(USER_TYPE)*maxRoom)) == NULL ){
free(*queue);
*queue = NULL;
return FALSE;
}
(*queue)->maxRoom = maxRoom;
(*queue)->head = (*queue)->tail = 0;
(*queue)->lastAction = ACTION_OUT;
return TRUE;
}
#endif
Python 版
#version1
class Queue(object):
def __init__(self, maxRoom):
self.maxRoom = maxRoom
self.queue = []
def push(self,value):
if not self.isfull():
self.queue.append(value)
return True
return False
def pop(self):
if not self.isempty():
value = self.queue.pop()
return value
return
def readtop(self,):
if not self.isempty():
return self.queue[-1]
return
def isempty(self,):
return len(self.queue) == 0
def isfull(self):
return len(self.queue) == self.maxRoom
#verision2
class Queue(object):
‘‘‘
last_action = 1 表示上次插入动作为push入队列,0表示出队列
‘‘‘
def __init__(self, maxRoom = 1024):
self.maxRoom = maxRoom
self.queue = [None for _ in range(maxRoom)]
self.head = 0
self.tail = 0
self.last_action = 1
def push(self,value):
if not self.isfull():
self.queue[self.tail] = value
self.tail = (self.tail + 1) % self.maxRoom
self.last_action = 0
return True
return False
def pop(self):
if not self.isempty():
value = self.queue[self.head]
self.queue[self.head] = None
self.head = (self.head + 1) % self.maxRoom
self.last_action = 1
return value
return
def readtop(self,):
if not self.isempty():
return self.queue[head]
return
def isempty(self,):
return self.last_action == 1 and self.head == self.tail
def isfull(self):
return self.last_action == 0 and self.head == self.tail
标签:
原文地址:http://www.cnblogs.com/wxl-dede/p/5343148.html