什么是队 及其特点
队是一种特殊的线性表,只允许在一端进行存取
特点:先进先出
初始化队
(含头结点,用于表示队中元素的个数)
typedef struct Node {
int data;
struct Node* next;
}Node;
Node* initQueue() {
Node* Q = (Node*)malloc(sizeof(Node));
Q->data = 0;
Q->next = NULL;
return Q;
}
入队
(插入到最后,类似于尾插法)
void enQueue(Node* Q, int data) {
Node* n = Q;
Node* node = (Node*)malloc(sizeof(Node));
node->data = data;
//从头结点开始,向后移动n,直到n为最后一个结点
for (int i = 0; i < Q->data; i++)
n = n->next;
node->next = n->next;
n->next = node;
Q->data++;
}
出队
int isEmpty(Node* Q) {
if (Q->next == NULL || Q->data == 0)
return 1;
else
return 0;
}
//删除第一个结点并返回其值
int deQueue(Node* Q) {
if (isEmpty(Q))
return -1;
else {
Node* n = Q->next;
int data = n->data;
Q->next = n->next;
free(n);
Q->data--;
return data;
}
}
打印队
void printQueue(Node* Q) {
Node* n = Q->next;
while (n) {
//从第一个元素开始打印
printf("%d->", n->data);
n = n->next;
}
printf("NULL\n");
}
用于检验以上函数的主函数
int main() {
Node* Q = initQueue();
enQueue(Q, 1);
enQueue(Q, 2);
enQueue(Q, 3);
enQueue(Q, 4);
enQueue(Q, 5);
enQueue(Q, 6);
printQueue(Q);
printf("current elem = %d\n", deQueue(Q));
printQueue(Q);
printf("current elem = %d\n", deQueue(Q));
printQueue(Q);
}
源代码
#include "headfile.h"
typedef struct Node {
int data;
struct Node* next;
}Node;
Node* initQueue() {
Node* Q = (Node*)malloc(sizeof(Node));
Q->data = 0;
Q->next = NULL;
return Q;
}
//入队(插入到最后,类似于尾插法)
void enQueue(Node* Q, int data) {
Node* n = Q;
Node* node = (Node*)malloc(sizeof(Node));
node->data = data;
//从头结点开始,向后移动n,直到n为最后一个结点
for (int i = 0; i < Q->data; i++)
n = n->next;
node->next = n->next;
n->next = node;
Q->data++;
}
void printQueue(Node* Q) {
Node* n = Q->next;
while (n) {
//从第一个元素开始打印
printf("%d->", n->data);
n = n->next;
}
printf("NULL\n");
}
int isEmpty(Node* Q) {
if (Q->next == NULL || Q->data == 0)
return 1;
else
return 0;
}
//删除第一个结点并返回其值
int deQueue(Node* Q) {
if (isEmpty(Q))
return -1;
else {
Node* n = Q->next;
int data = n->data;
Q->next = n->next;
free(n);
Q->data--;
return data;
}
}
int main() {
Node* Q = initQueue();
enQueue(Q, 1);
enQueue(Q, 2);
enQueue(Q, 3);
enQueue(Q, 4);
enQueue(Q, 5);
enQueue(Q, 6);
printQueue(Q);
printf("current elem = %d\n", deQueue(Q));
printQueue(Q);
printf("current elem = %d\n", deQueue(Q));
printQueue(Q);
}