/* create a queue by linklist
*/
#include<stdio.h>
#include<stdlib.h>
struct Node
{
int value;
struct Node* next;
};
struct Queue
{
struct Node* front;
struct Node* rear;
};
typedef struct Node node;
typedef struct Queue queue;
void menu(void)
{
printf("menu:\n");
printf("1.initialize\n");
printf("2.enqueue\n");
printf("3.dequeue\n");
printf("4.printelements/n");
printf("5.deletequeue\n");
}
int Choice(void)
{
int choice;
printf("please input your choice:");
scanf("%d",&choice);
return choice;
}
queue* initialize(void)
{
queue* q=(queue*)malloc(sizeof(queue));
q->front=NULL;
q->rear=NULL;
return q;
}
void enqueue(queue* q,int data)
{
node* newnode=(node*)malloc(sizeof(node));
newnode->value=data;
newnode->next=NULL;
if(!q->rear)
q->rear=newnode;
else
{
q->rear->next=newnode;
q->rear=newnode;
}
if(!q->front)
q->front=q->rear;
}
int isempty(queue* q)
{
return (q->front==NULL);
}
int dequeue(queue* q)
{
node* temp;
int data;
if(isempty(q))
{
printf("the queue is empty\n");
return 0;
}
else
{
temp=q->front;
data=temp->value;
q->front=q->front->next;
free(temp);
return data;
}
}
void printelements(queue* q)
{
node* temp=q->front;
printf("the elements are:");
while(temp)
{
printf("%d ",temp->value);
temp=temp->next;
}
}
void deletequeue(queue* q)
{
node *temp,*prev=q->front;
while(prev)
{
temp=prev;
prev=prev->next;
free(temp);
}
free(q);
}
int main()
{
int flag=1,data;
queue* q=NULL;
menu();
while(flag)
{
switch(Choice())
{
case 1:
q=initialize();
break;
case 2:{
printf("please input value\n");
scanf("%d",&data);
enqueue(q,data);
break;
}
case 3:{
data=dequeue(q);
if(data)
printf("the pop is %d\n",data);
break;
}
case 4:{
printelements(q);
break;
}
case 5:{
deletequeue(q);
printf("the queue has deleted\n");
break;
}
}
}
return 0;
}
队列(链表实现)
最新推荐文章于 2024-06-11 18:17:33 发布