C语言实现队列

1.C语言实现

我的这个实现是基于双向链表的

#include 
#include 
#include 
// 我的设计理念就是让队列基于双向链表实现
// 节点类
typedef struct Node {
	// 数据域
	int data;
	// 指针域
	struct Node* pre;
	struct Node* next;
}Node;
// 初始化队列
Node* initQueue() {
	Node* queue = (Node*)malloc(sizeof(Node));
	queue->data = 0;
	queue->pre = NULL;
	queue->next = NULL;
	return queue;
}
// 入队函数 队尾入队
void enQueue(int data, Node* queue) {
	// 为入队元素分配内存
	Node* node = (Node*)malloc(sizeof(Node));
	node->data = data;
	// 获取队尾元素
	Node* tail = queue;
	while (tail->next) {
		tail = tail->next;
	}
	Node* next = tail->next;
	tail->next = node;
	node->pre = tail;
	node->next = next;
	// 更新队列长度
	queue->data++;
}
// 出队函数 队头出队
int deQueue(Node* queue) {
	// 如果队列为空的话 那么就无法执行出队操作
	if (queue->data == 0)return -1;
	Node* pre = queue;
	Node* node = pre->next;
	int delete = node->data;
	Node* next = node->next;
	pre->next = next;
	if(next)
		next->pre = pre;
	free(node);
	queue->data--;
	return delete;
}
// 对队列进行判空操作
bool isEmpty(Node* queue) {
	return queue->data == 0;
}
// 对队列进行清空操作
void clear(Node* queue) {
	Node* cur = queue->next;
	Node* next;
	while (cur) {
		next = cur->next;
		free(cur);
		cur = next;
	}
	queue->data = 0;
}
// 获取队头元素
int get(Node* queue) {
	if (queue->data == 0)return -1;
	return queue->next->data;
}
// 获取队列长度
int size(Node* queue) {
	return queue->data;
}
// 打印队列
void printQueue(Node* queue) {
	Node* cur = queue->next;
	while (cur) {
		printf("%d ", cur->data);
		cur = cur->next;
	}
	printf("\n");
}
// 定义一个主函数
int main() {
	Node* queue = initQueue();
	enQueue(1, queue);// 1
	enQueue(2, queue);// 1 2
	enQueue(3, queue);// 1 2 3
	enQueue(4, queue);// 1 2 3 4
	printQueue(queue);// 1 2 3 4
	deQueue(queue);// 2 3 4
	printQueue(queue);// 2 3 4
	printf("%d\n", get(queue));// 2
	printf("%d\n", isEmpty(queue));// 0
	printf("%d\n", size(queue));// 3
	clear(queue);
	printf("%d\n", size(queue));// 0
	return 0;
}

测试可以顺利通过

你可能感兴趣的:(c语言,开发语言)