本文涉及的链队操作有如下:
- 链队的初始化
- 链队元素的入队
- 链队元素的出队
- 链队元素的判空
/*链队test*/
#include<iostream>
#include<stdlib.h>
typedef int status;
typedef int ElemType;
typedef struct Qnode{
ElemType data;
struct Qnode *next;
}QNode,*Queueptr;
typedef struct Numpoint{
QNode *rear;
QNode *front;
}LinkQueue;
//初始化
status initQueue(LinkQueue &q){
q.rear=q.front=(Queueptr) malloc(sizeof(QNode));
q.front->next=NULL;
return 1;
}
//入队
void EnQueue(LinkQueue &q){
Queueptr p;
int n;
printf("请输入入队元素个数:");
scanf("%d",&n);
for(int i;i<n;i++){
p=new QNode;
printf("请输入第%d个数字:",i+1);
scanf("%d",&p->data);
p->next=NULL;
q.rear->next=p;
q.rear=p;
}
}
//判断是否为空(涉及出队)
status QueueEmpty(LinkQueue &q,ElemType &e){
Queueptr p;
if(q.front==q.rear)return 0;
else {
e=q.front->next->data;
p=q.front->next;
q.front->next=q.front->next->next;
delete p;
return 1;
}
}
//出队
void DeQueue(LinkQueue &q){
ElemType e;
int n,flag;
printf("请输入出队的个数:");
scanf("%d",&n);
for(int i=0;i<n;i++){
flag=QueueEmpty(q,e);
if(flag){
printf("%d\t已出队!!\n",e);
}
else{
printf("队列已空!\n");break;
}
}
}
//判断队列是否为空(涉及获得队头元素)
status Empty(LinkQueue q){
if(q.front==q.rear)return 0;
else return 1;
}
//获得队头元素
void GetFront(LinkQueue &q){
int flag;
ElemType e;
flag=Empty(q);
e=q.front->next->data;
if(flag)
printf("队头元素为:%d\n",e);
else printf("队头元素为空!!\n");
}
//菜单
void menu(){
printf("——————————操作代码——————————\n");
printf("入队————1\t出队————2\t获得队首————3\t退出————0\n");
printf("——————————操作代码——————————\n");
}
int main(){
int c;
LinkQueue q;
initQueue(q);
while(1){
menu();
printf("请输入操作代码:");
scanf("%d",&c);
if(c==0)break;
switch(c){
case 1:EnQueue(q);break;
case 2:DeQueue(q);break;
case 3:GetFront(q);break;
default : printf("操作代码不在范围内!!\n");
}
}
return 0;
}