编写一个程序,实现链队的各种基本运算(假设队列中元素类型为char),并在此基础上
设计一个程序,完成如下功能:
(1)初始化队列q;
(2)判断链队q是否非空;
(3)依次进队a,b,c;
(4)出队一个元素,并输出该元素;
(5)输出链队q的元素个数;
(6)依次进链队元素d,e,f;
(7)输出链队q的元素个数;
(8)输出出队序列;
设计一个程序,完成如下功能:
(1)初始化队列q;
(2)判断链队q是否非空;
(3)依次进队a,b,c;
(4)出队一个元素,并输出该元素;
(5)输出链队q的元素个数;
(6)依次进链队元素d,e,f;
(7)输出链队q的元素个数;
(8)输出出队序列;
(9)释放队列。
<span style="font-size:18px;">#include <iostream>
using namespace std;
typedef char ElemType;
typedef struct qnode{
ElemType data;
struct qnode *next;
}QNode;
typedef struct{
QNode *front;
QNode *rear;
}LiQueue;
void InitQueue(LiQueue * &q){ //初始化队列
q= new LiQueue;
q->front = q->rear = NULL;
}
bool QueueEmpty(LiQueue * &q){ //判断队列是否为空
return (q->rear==NULL);
}
void enQueue(LiQueue * &q,ElemType e){ //进队列
QNode *p;
p = new QNode;
p->data = e;
p->next = NULL;
if(q->rear==NULL)
q->front=q->rear=p;
else{
q->rear->next = p;
q->rear = p;
}
}
bool deQueue(LiQueue * &q,ElemType &e){ //出队列
QNode *t;
if(q->rear == NULL)
return false;
t = q->front;
if(q->front == q->rear)
q->front = q->rear = NULL;
else q->front=q->front->next;
e=t->data;
delete(t);
return true;
}
int QueueLength(LiQueue *&q){ //计算链队长度
QNode *p = q->front;
int length=0;
while(p!=NULL){
length++;
p = p->next;
}
return (length);
}
/*void PrintQueue(LiQueue *&q){ //打印链队
QNode *p = q->front;
while(p!=NULL){
cout<<p->data<<" ";
p=p->next;
}
}*/
void DestroyQueue(LiQueue * &q){ //销毁链队
QNode *p = q->front,*r;
if(p!=NULL){
r=p->next;
while(r!=NULL){
delete(p);
p=r; r = p->next;
}
}
delete(p);
delete(q);
}
int main(){
LiQueue *q;
ElemType e;
InitQueue(q);
if(QueueEmpty(q))
cout<<"链队为空"<<endl;
else cout<<"链队不为空"<<endl;
enQueue(q,'a');
enQueue(q,'b');
enQueue(q,'c');
deQueue(q,e);
cout<<"第一次出队的元素:"<<e<<endl;
cout<<"The length 1: "<<QueueLength(q)<<endl;
//PrintQueue(q);
enQueue(q,'d');
enQueue(q,'e');
enQueue(q,'f');
cout<<"The length 2: "<<QueueLength(q)<<endl;
while(q->front!=NULL){
QNode *p = q->front;
deQueue(q,e);
cout<<e<<" ";
p=p->next;
}
DestroyQueue(q);
return 0;
}
</span>