队列的链表实现
#include <stdio.h> #include <stdlib.h> typedef int datatype; //此处构建两个结构体,如果将front和rear两个指针放入node结构体时,每次添加元素时都会创建新的front和rear指针 typedef struct node { datatype data; struct node * next; }node_t,*node_p; typedef struct node_pointer { node_p front; node_p rear; }node_pointer_t,*node_pointer_p; node_pointer_p squ_create(); int squ_push(node_pointer_p P,datatype value); int squ_pop(node_pointer_p P); int squ_empty(node_pointer_p P); int main(int argc, const char *argv[]) { node_pointer_p P = squ_create(); if(NULL == P) { printf("函数调用失败\n"); return -1; } squ_push(P,1); squ_push(P,2); squ_push(P,3); squ_push(P,4); squ_pop(P); squ_pop(P); squ_pop(P); squ_pop(P); squ_pop(P); return 0; } //为node_t和node_pointer_t创建内存空间 node_pointer_p squ_create() { node_p S = (node_p)malloc(sizeof(node_t)); if(NULL == S) { printf("栈空间内存开辟失败\n"); return NULL; } S->next = NULL; node_pointer_p P = (node_pointer_p)malloc(sizeof(node_pointer_t)); if(NULL == P) { free(S); S = NULL; printf("指向栈空间的指针内存开辟失败\n"); return NULL; } P->front = S; P->rear = S; return P; } //入队 int squ_push(node_pointer_p P,datatype value) { node_p S = (node_p)malloc(sizeof(node_t)); if(S==NULL) { printf("开辟空间失败\n"); return -1; } S->data = value; S->next = NULL; P->rear->next = S; P->rear = S; return 0; } //出队 int squ_pop(node_pointer_p P) { if(squ_empty(P)) { printf("队列已空\n"); return -1; } int value; value = P->front->next->data; node_p S = P->front; printf("pop : %d\n",value); P->front = P->front->next; free(S); return 0; } //判断队列是否为空 int squ_empty(node_pointer_p P) { return P->front == P->rear; }