#include<iostream>
#include<stdlib.h>
#define OK 1
#define ERROR 0
using namespace std;
typedef struct LNode
{
int data;
struct LNode *next;
}LNode;
typedef struct Queue
{
LNode *front ,*rear;
}Queue;
void init_queue(Queue **q)
{
LNode *node;
*q=(Queue*)malloc(sizeof(Queue));
node=(LNode*)malloc(sizeof(LNode));
node->next=NULL;
(*q)->front=(*q)->rear=node;
}
int insert_queue(Queue **q,int num)
{
LNode *node;
node=(LNode*)malloc(sizeof(LNode));
if(!node) return ERROR;
node->data=num;
node->next=NULL;
(*q)->rear->next=node;
(*q)->rear=node;
return OK;
}
int delete_queue(Queue **q,int *num)
{
if((*q)->rear==(*q)->front) return ERROR;
LNode *node;
node=(*q)->front->next;
(*q)->front->next=node->next;
*num=node->data;
if(node==(*q)->rear) (*q)->rear=(*q)->front;
free(node);
return OK;
}
void empty_queue(Queue **q)
{
if((*q)->front==(*q)->rear) cout<<"已经是空队列"<<endl;
while((*q)->front!=NULL)
{
(*q)->rear=(*q)->front->next;
free((*q)->front);
(*q)->front=(*q)->rear;
}
cout<<"清除成功"<<endl;
}
void show_queue(Queue **q)
{
LNode *node;
node=(*q)->front->next;
while(node!=NULL)
{
cout<<node->data<<" ";
node=node->next;
}
cout<<endl;
}
int main()
{
Queue *q;
init_queue(&q);
while(1)
{
int tmp;
cout<<"入队1出队2清队3输出队列4:";
cin>>tmp;
switch(tmp)
{
case 1:
int num1;
cin>>num1;
if(!insert_queue(&q,num1)) cout<<"入队失败"<<endl;
break;
case 2:
int num2;
if(!delete_queue(&q,&num2)) cout<<"出队失败"<<endl;
else cout<<"出队数据:"<<num2<<endl;
break;
case 3:
empty_queue(&q);
break;
default:
show_queue(&q);
break;
}
}
return 0;
}
/*
1
1
1
2
1
3
1
4
1
5
1
78
1
45
4
3
3
1
23
1
56
3
3
3
1
56
1
112
1
667
4
*/
数据结构-链队列的基本操作
最新推荐文章于 2021-12-28 22:04:04 发布