数据结构-链队列的基本操作

#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


*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值