数据结构:队列的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("元素内存增加失败。\n");
		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;
}

你可能感兴趣的:(数据结构与算法,数据结构)