链式队列的操作实现

操作实现结果:

一、运行后的效果:

二、入列:

三、出列:

四、取队头元素:

代码:

/**
*程序是链式的队列的代码 
*/ 



                 #include <iostream>
                 #include <malloc.h>
<span style="white-space:pre">	</span>         #include <math.h>
                 using namespace std;
                 typedef int DataType;//定义DataType 为整型 
     
                 /**
                 *创建链式队列的节点的结构体的定义如下 
                 *
                 */
<span style="white-space:pre">		</span>typedef struct qnode{
<span style="white-space:pre">		</span>          DataType data;
<span style="white-space:pre">			</span>   struct qnode *next;    
 <span style="white-space:pre">	</span>       }LQNode; 
<span style="white-space:pre">	</span>        /**
<span style="white-space:pre">	</span>         *为了方便把链式队列的头指针和尾指针定义成结构体 
<span style="white-space:pre">	</span>         */
<span style="white-space:pre">	</span>       typedef struct {
                       LQNode *front;
<span style="white-space:pre">		</span>       LQNode *rear;<span style="white-space:pre">				</span> 
 <span style="white-space:pre">	</span>       }LQueue;
 


//初始化
void QueueInitiate(LQueue *q){
q->rear = NULL;
q->front = NULL;
}
//判断非空
int QueueNotEmpty(LQueue *q){
if(q->front== NULL){
return 0;
}else {
return 1;
}

}
/**
*
*入列
*/
int QueueAppend(LQueue *q,DataType x){
LQNode *p;
/**
*判断是否成功申请空间 
*
*/ 
if(p != NULL){
free(p);
p =NULL;
}
p = (LQNode *)malloc(sizeof(LQNode));
if(p !=NULL){
cout<<"申请空间成功!"<<endl;
}else{
cout<<"内存空间不足!"<<endl;
return 0; 
}
p->data = x;
p->next = NULL;//到此已经成功的创建了一个新的节点
/**
*将新的节点插入队列的末尾 
*
*/ 
if(q->rear != NULL){
q->rear->next = p;
q->rear = p;
}
if(q->front == NULL){
q->rear = p;
q->front = p;
} 
cout<<"成功的入列!"<<endl; 
} 
//出队列
int QueueDelete(LQueue *q,DataType *d){
LQNode *p;
/**
*判断内存中是否有数据,有就输出,没有返回0 
*
*/ 
if(q->front == NULL){
cout<<"此时队列中无元素出列!"<<endl;
return 0; 
}else{
*d = q->front->data;
p = q->front;
q->front= q->front->next;
if(q->front == NULL){
q->rear = NULL; 
}
free(p);//释放节点内存空间 
return 1; 
}

} 
//取队头元素
int QueueGet(LQueue *q,DataType *d){
if(q->front == NULL){
cout<<"队列已空,没有队头元素"<<endl;
return 0; 
}else {
*d = q->front->data;//获取队头元素 
return 1; 
} 
}
//撤销动态申请的空间
void Destroy(LQueue *q){
LQNode *p,*p1;
/**
*撤销链式队列所占的内存空间 
*
*/ 
p = q->front;
while(p != NULL){
p1 =p;
p = p->next;
free(p1);
}
}


void menu(){
cout<<"_________________________________________________________"<<endl;
cout<<"|*******************************************************|"<<endl;
cout<<"|*****************欢迎进入菜单选项*.********************|"<<endl;
cout<<"|*****************进入初始化阶段请稍后....**************|"<<endl;
cout<<"|*****************1、入列 ***************|"<<endl;
cout<<"|*****************2、出列 ***************|"<<endl;
cout<<"|*****************3、取队头元素 ***************|"<<endl;
cout<<"|*******************************************************|"<<endl;
cout<<"_________________________________________________________"<<endl;
}
/**
*菜单项的操作 
*以及一些循环操作的实现 
*/ 
void operation(LQueue *q){
int input;
int num;
int a,i =0;
char c;
menu();
cout<<"请选择:";cin>>input;
switch(input){
case 1:
//cout<<"请输入要入列的数:";
while(c!=NULL || c != 'n'){
cout<<"请输入要入列的数:";cin>>num;
QueueAppend(q,num);
cout<<"是否继续输入:Y/N"<<endl;
cin>>c;
if(c == 'Y'||c == 'y'){
continue;
}
else if(c == 'N'||c =='n'){
break;
}else{
while(c !='n'||c != 'N'){
cout<<"输入参数不合法!请重新输入!"<<endl; 
cin>>c; 
if(c == 'n'||c =='N'){
cout<<"跳转成功!"<<endl;
break;
} 
}
break;
} 

} 
operation(q);break;
case 2:
while(c!=NULL|| c != 'n'){
if(QueueDelete(q,&a)==0){
cout<<"你可入列操作!"<<endl; 
}else{
cout<<"第"<<++i<<"个出队列元素:"<<a<<endl;
}
cout<<"是否继续出:Y/N"<<endl;
cin>>c;
if(c == 'Y'||c == 'y'){
continue;
}else if(c == 'N'||c =='n'){
break;
}else{
while(c !='n'||c != 'N'){
cout<<"输入参数不合法!请重新输入!"<<endl; 
cin>>c; 
if(c == 'n'||c =='N'){
cout<<"跳转成功!"<<endl;
break;
} 
}
break;
} 

} 
operation(q);break;
case 3:
if(QueueGet(q,&a) ==1){
cout<<"头数据元素:"<<a<<endl;
cout<<"取头数据元素成功!"<<endl;
}
operation(q);
break;

} 

}

int main(){
LQueue *q;
q = (LQueue *)malloc(sizeof(LQueue));
QueueInitiate(q);
QueueNotEmpty(q);
operation(q);
Destroy(q);
return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值