链队列(带头节点,其数据域为队列中元素个数)
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
}Node;
Node* initQueue(){
Node* queue = (Node*)malloc(sizeof(Node));
queue->data = 0;
queue->next = NULL;
return queue;
}
void push(Node* queue, int data) {
Node* n = (Node*)malloc(sizeof(Node));
n->data = data;
n->next = queue->next;
queue->next = n;
queue->data++;
}
int pop(Node* queue) {
if (queue->data == 0) {
return 0;
}
else {
Node* pre = queue;
Node* cur = queue->next;
while (cur->next) {
pre = cur;
cur = cur->next;
}
int data = cur->data;
pre->next = NULL;
free(cur);
queue->data--;
return data;
}
}
void printQueue(Node* queue) {
Node* temp = queue->next;
while (temp) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
void test() {
Node* queue = initQueue();
push(queue, 10);
push(queue, 20);
push(queue, 30);
push(queue, 40);
push(queue, 50);
push(queue, 60);
printQueue(queue);
pop(queue);
printQueue(queue);
pop(queue);
printQueue(queue);
}
int main() {
test();
return 0;
}