标签:command com sem queue ase lin printf 结构体 有一个
/* linkedQueue.c */ /* 链队列 */ #include <stdio.h> #include <stdlib.h> #include <stdbool.h> /* 链队列数据结构 */ typedef struct node { int data; /* 节点存储数据 */ struct node *next; /* 指向下一个节点的指针 */ } Node; /* front指向队列头,rear指向队列尾 */ /* front->next指向队列第一个节点 */ typedef struct { Node *front, *rear; } Queue; void interface(void); /* 链队列函数声明 */ Queue *initializeQueue(); bool isEmptyQueue(Queue *q); void inQueue(Queue *q, int number); int outQueue(Queue *q); int main(){ Queue *q = initializeQueue(); int flag, number; interface(); for(;;){ printf("Command: "); scanf("%d", &flag); switch(flag){ case 0: puts("Bye!"); return 0; break; case 1: printf("Enter a number: "); scanf("%d", &number); inQueue(q, number); break; case 2: if(isEmptyQueue(q)) printf("Queue is empty!\n"); else printf("value: %d\n", outQueue(q)); break; } } return 0; } void interface(void){ puts("+************************+"); puts("+ 0, quit 退出 +"); puts("+ 1, in 入队 +"); puts("+ 2, out 出队 +"); puts("+************************+"); } /* 链队列函数实现 */ /* 初始化链队列 */ Queue *initializeQueue(){ /* 申请Queue结构体以及Node头节点,front和rear均指向头节点 */ Queue *q = (Queue*)malloc(sizeof(Queue)); Node *p = (Node*)malloc(sizeof(Node)); p->next = NULL; q->front = p; q->rear = p; return q; } /* 判断队列是否为空 */ bool isEmptyQueue(Queue *q){ if(q->front==q->rear) return true; else return false; } /* 入列 */ void inQueue(Queue *q, int number){ /* 新建一个节点,存储number数据,rear指向新节点 */ Node *p = (Node*)malloc(sizeof(Node)); p->data = number; p->next = NULL; q->rear->next = p; /* 队列中的最后一个节点的next指向这个新的节点 */ q->rear = p; /* rear指向新节点 */ } /* 出列 */ int outQueue(Queue *q){ Node *p = q->front->next; /* p指向队列的第一个节点 */ q->front->next = p->next; /* q->front->next指向第二个节点 */ int r = p->data; /* 获取第一个节点存储的值 */ free(p); /* 释放第一个节点 */ /* 只有一个元素时,出队后队空,需要修改尾指针 */ if(q->front->next==NULL) q->rear = q->front; return r; }
标签:command com sem queue ase lin printf 结构体 有一个
原文地址:https://www.cnblogs.com/noonjuan/p/11493510.html