//链队列基本运算的实现
#include<iostream>
using namespace std;
typedef char datatype; //队列元素类型,假设为字符型
typedef struct node * pointer; //结点指针类型
struct node //链队结点结构
{
datatype data;
pointer next;
};
typedef struct
{
pointer front;
pointer rear;
} lkqueue;
//初始化
lkqueue * Init_lkqueue()
{
lkqueue * lq = new lkqueue;
pointer p = new node;
p->next = NULL;
lq->front = p;
lq->rear = p;
return lq;
}
//判队空
int Empty_lkqueue(lkqueue *lq)
{
if(lq->rear==lq->front)
return 1;
else
return 0;
}
//取队头
int Gethead_lkqueue(lkqueue *lq,datatype *x)
{
pointer p;
if(lq->rear==lq->front)
{
cout<<"队空,无队头可取!\n";
return 0;
}
else
{
p=lq->front->next; //队头
*x=p->data; //取出队头元素值
return 1;
}
}
//入队
void En_lkqueue(lkqueue *lq,datatype x)
{
pointer p;
p=new node; //申请新结点空间
p->data=x; //给新结点赋值
lq->rear->next=p; //原尾指针指向新结点
lq->rear=p; //新结点成为新尾结点
p->next=NULL; //新尾结点next指针为空
}
//出队
int De_lkqueue(lkqueue *lq,datatype *x)
{
pointer s;
if(lq->rear==lq->front)//下溢
{
cout<<"队空,不能出队!\n";
return 0;
}
else
{
s=lq->front->next;
*x=s->data;
lq->front->next=s->next;
if(s->next==NULL) //出队的是最后一个结点
lq->rear=lq->front;//改尾指针
delete s;
return 1;
}
}
void Display(lkqueue * lq)
{
if(lq->rear==lq->front)//下溢
{
cout<<"队列为空!\n";
}
else
{
pointer p;
for( p = lq->front->next; p!=lq->rear->next;p=p->next )
{
cout<<p->data<<" ";
}
cout<<endl;
}
}
int main()
{
lkqueue *Q;
Q=Init_lkqueue();
char choice,x;
int flag = 1;
while(flag)
{
cout<<"------------链队列------------------------------"<<endl;
cout<<" 1. 入队列 "<<endl;
cout<<" 2. 出队列 "<<endl;
cout<<" 3. 取队头元素 "<<endl;
cout<<" 4. 判断链队列是否为空 "<<endl;
cout<<" 5. 浏览队头到队尾所有元素(测试用) "<<endl;
cout<<" 6. 退出 "<<endl;
cout<<"------------------------------------------------"<<endl;
cout<<"请选择:";
cin>>choice;
switch(choice)
{
case '1':
cout<<"请输入一个需要入队列的字符"<<endl;
cin>>x;
En_lkqueue(Q,x);
cout<<"入队列完成"<<endl;
break;
case '2':
if(De_lkqueue(Q,&x))
cout<<"出队列成功,出队列的元素是:"<<x<<endl;
else
cout<<"出队列失败!"<<endl;
break;
case '3': if(Gethead_lkqueue(Q,&x))
cout<<"取队头元素成功,队头的元素是:"<<x<<endl;
else
cout<<"取队头元素失败!"<<endl;
break;
case '4': if(Empty_lkqueue(Q))
cout<<"此时队列为空。"<<endl;
else
cout<<"此时队列不为空。"<<endl;
break;
case '5': Display(Q);
break;
case '6': flag=0;
break;
default : cout<<"输入错误,请重新选择。"<<endl;
}
}
return 0;
}
链队列基本运算的实现
最新推荐文章于 2021-03-28 22:28:59 发布