#include <stdio.h>
#include <stdlib.h>
// 队列有一个队头,和一个队尾
//链式队列
struct Node{
int data;
struct Node* next;
};
struct Queue{
struct Node* frontNode;
struct Node* tailNode;
int queueSize;
};
//创建节点
struct Node* createNode(int data){
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
//创建队列
struct Queue* createQueue(){
struct Queue* queue = (struct Queue*)malloc(sizeof(struct Queue));
queue->frontNode = queue->tailNode;
queue->queueSize = 0;
return queue;
}
//入队
void push(struct Queue* queue,int data){
struct Node* newNode = createNode(data);
if(queue->queueSize == 0){
queue->frontNode = newNode;
}else{
queue->tailNode->next = newNode;//不为空,就是将当前队尾的下一节点设置为新的节点
queue->tailNode = newNode;//新节点就是现在的队尾
}
queue->queueSize++;
}
//获取队头元素
int front(struct Queue* queue){
if(queue->queueSize == 0){
printf("queue is Null\n");
return -1;
}
return queue->frontNode->data;
}
//判断队列空
int empty(struct Queue* queue){
return queue->queueSize == 0;
}
//出队
void pop(struct Queue* queue){
if (queue->queueSize ==0){
printf("queue is NULL\n");
return;
}else{
struct Node* nextNode = queue->frontNode->next;
free(queue->frontNode);
queue->frontNode = nextNode;
queue->queueSize--;
}
}
int main(){
struct Queue* myqueue = createQueue();
push(myqueue,1);
push(myqueue,2);
push(myqueue,3);
push(myqueue,4);
while (!empty(myqueue))
{
/* code */
printf("%d\t",front(myqueue));
pop(myqueue);
}
return 0;
}
【C语言】使用结构体实现链式队列
最新推荐文章于 2024-05-08 22:04:44 发布