c语言中怎样用这两个结构体实现队列的功能
typedefstructnode*PNode;/*定义队列的每个节点的类型*/typedefstructnode{intdata;//每个节点中存放的数据PNodene...
typedef struct node * PNode;
/*定义队列的每个节点的类型*/
typedef struct node
{
int data;//每个节点中存放的数据
PNode next;//下一节点
}Node;
typedef struct queue
{
PNode head;//队头
PNode tail;//队尾
int Length;//队列长度
}Queue;
用这两个结构体实现建队列、入队、出队、判断是否为空、获取队列长度、获取队头数字(不出队)、获取队尾数字(不出队)、清空队列、销毁队列这些功能?谢谢 展开
/*定义队列的每个节点的类型*/
typedef struct node
{
int data;//每个节点中存放的数据
PNode next;//下一节点
}Node;
typedef struct queue
{
PNode head;//队头
PNode tail;//队尾
int Length;//队列长度
}Queue;
用这两个结构体实现建队列、入队、出队、判断是否为空、获取队列长度、获取队头数字(不出队)、获取队尾数字(不出队)、清空队列、销毁队列这些功能?谢谢 展开
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct node * PNode; /*定义队列的每个节点的类型*/
typedef struct node {
int data;//每个节点中存放的数据
PNode next;//下一节点
}Node;
typedef struct queue {
PNode head;//队头
PNode tail;//队尾
int Length;//队列长度
}Queue;
Queue *GetQueue() { // 返回创建的新空队列
Queue *queue = (Queue *)malloc(sizeof(Queue));
queue->head = (Node *)malloc(sizeof(Node));
queue->head->next = NULL;
queue->tail = queue->head;
queue->Length = 0;
return queue;
}
void EnQueue(Queue *Q,int x) { // 入队
PNode newnode = (Node *)malloc(sizeof(Node));
newnode->data = x;
++Q->Length;
newnode->next = NULL;
Q->tail->next = newnode;
Q->tail = newnode;
}
int notEmpty(Queue *Q) {
return (Q->Length > 0);
}
int DeQueue(Queue *Q,int *x) { // 出队
PNode p;
if(notEmpty(Q)) {
p = Q->head->next;
*x = p->data;
Q->head->next = p->next;
--Q->Length;
free(p);
return 1;
}
return 0;
}
int GetLength(Queue *Q) { // 获取队列长度
return Q->Length;
}
int GetFirst(Queue *Q) { // 获取队头数据
return Q->head->next->data;
}
int GetLast(Queue *Q) { // 获取队尾数据
return Q->tail->data;
}
void ClearQueue(Queue *Q) {
Q->tail = Q->head;
Q->Length = 0;
}
void DestroyQueue(Queue *Q) {
PNode q,p = Q->head;
while(p) {
q = p;
p = q->next;
free(q);
}
Q->head = Q->tail = NULL;
free(Q);
Q = NULL;
}
int main() {
int i,n = 10,x;
Queue *Q = GetQueue();
srand(time(0));
for(i = 0; i < n; ++i) {
x = rand() % 100;
printf("%d ",x);
EnQueue(Q,x);
}
printf("\n");
while(notEmpty(Q)) {
DeQueue(Q,&x);
printf("%d ",x);
}
printf("\n");
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询