#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(Node)
#define LEN1 sizeof(LinkQueuePtr)
typedef struct Node
{
int data;
struct Node *next;
}Node,*LinkQueue;
typedef struct
{
LinkQueue rear;
LinkQueue front;
}LinkQueuePtr;
LinkQueuePtr *Q;
void InitQueue()
{
Q = (LinkQueuePtr*)malloc(LEN1);
Q -> rear = (LinkQueue)malloc(LEN);
printf("aa\n");
Q -> front = Q -> rear;
// Q -> rear = Q -> front;
Q -> front -> next = NULL;
printf("bb\n");
}
void EnQueue()
{
int e;
LinkQueue q = (LinkQueue)malloc(LEN);
printf("Please input value:");
scanf("%d",&e);
q -> data = e;
q -> next = NULL;
Q -> rear -> next = q;
Q -> rear = q;
}
int DeQueue()
{
LinkQueue q = Q -> front -> next;
if(Q -> rear == Q -> front)
{
printf("queue empty!\n");
return 0;
}
Q -> front -> next = q -> next;
if(Q -> rear == q)
Q -> rear = Q -> front;
free(q);
return 1;
}
void EmptyQueue()
{
if(Q -> front == Q -> rear)
{
printf("queue empty!\n");
}
else
{
printf("queue not empty!\n");
}
}
void LengthQueue()
{
int i = 0;
LinkQueue p = Q -> front -> next;
while(p != NULL)
{
i++;
p = p -> next;
}
printf("length = %d\n",i);
}
void ClearQueue()
{
LinkQueue p,q;
p = Q -> front -> next;
while(p != NULL)
{
q = p;
p = p -> next;
free(q);
Q -> front = Q ->front -> next;
}
}
void DestroyQueue()
{
LinkQueue p,q;
p = Q -> front -> next;
while(p != NULL)
{
q = p;
p = p -> next;
free(q);
}
Q -> front -> next = NULL;
free(Q -> front);
free(Q);
Q = NULL;
}
void GetHead()
{
printf("data = %d\n",Q -> front -> next -> data);
}
void TraverseQueue()
{
LinkQueue p = Q -> front -> next;
while(p != NULL)
{
printf("data = %d\n",p -> data);
p = p -> next;
}
}
int main()
{
int n;
while(1)
{
printf("1.Init 2.EnQueue 3.DeQueue 4.Clear 5.Length\n 6.Empty 7.Destroy 8.Print 9.GetHead 10.Exit\n");
printf("Please input num:");
scanf("%d",&n);
switch(n)
{
case 1:InitQueue();break;
case 2:EnQueue();break;
case 3:DeQueue();break;
case 4:ClearQueue();break;
case 5:LengthQueue();break;
case 6:EmptyQueue();break;
case 7:DestroyQueue();break;
case 8:TraverseQueue();break;
case 9:GetHead();break;
}
if(n == 10)
break;
}
}
C语言链队的各种操作
最新推荐文章于 2022-08-08 16:04:26 发布