当前位置: 首页 > >

数据结构:队列的C语言实现

发布时间:

队列(Queue),是一种特殊的线性表,其元素的逻辑关系是线性关系,其特殊性体现于只能在一端做插入运算,另一端删除元素。队列表现先进先出(FIFO)的特点。
队列的基本运算如下:


createQueue():创建队列isEmpty(Queue queue):判空getFirstElem(Queue queue):得到队头元素addElem(Queue& queue, QueueType m):元素入队exitQueue(Queue& queue, QueueType& m):元素出队destoryQueue(Q):销毁队列

#include
#include

typedef int QueueType;

struct Queue{
QueueType key;
struct LinkQueue *next;
};

typedef struct Node{
struct LinkQueue *head;//头指针
struct LinkQueue *end;//尾指针
}Queue;

//创建队列
Queue createQueue(){
Queue queue;
queue.head=0;
queue.end=0;
return queue;
}

//判断队列是否为空
int isEmpty(Queue queue){
return queue.head==queue.end?1:0;
}

//得到队头元素
QueueType getFirstElem(Queue queue){
if(queue.head==0){
return 0;
}
return queue.head->key;
}

//入队
int addElem(Queue& queue, QueueType m){
sturct LinkQueue* node = (sturct LinkQueue*)malloc(sizeof(sturct LinkQueue));
if(!node){
printf("元素内存增加失败。
");
return -1;
}
node->key=m;
node->next=0;
if (queue.end == 0) {
queue.end = node;
} else {//修改队尾指针
queue.end->next = node;
queue.end = node;
}
if (queue.head == 0) {
queue.head = node;
}
return 1;
}
//出队
int exitQueue(Queue& queue, QueueType& m) {
if (isEmpty(queue) == 0)
return 0;
struct LinkQueue* node = queue.head;
queue.head = node->next;
node->next = 0;
m = node->key;
free(node);
if (queue.head == 0)
queue.end = 0;
return 1;
}
int main(int argc, char const *argv[])
{
/* code */
return 0;
}



友情链接: