zoukankan      html  css  js  c++  java
  • 链式队列的操作实现

    操作实现结果:

    一、运行后的效果:

    二、入列:

    三、出列:

    四、取队头元素:

    代码:

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



    #include <iostream>
    #include <malloc.h>
    #include <math.h>
    using namespace std;
    typedef int DataType;//定义DataType 为整型

    /**
    *创建链式队列的节点的结构体的定义如下
    *
    */
    typedef struct qnode{
    DataType data;
    struct qnode *next;
    }LQNode;
    /**
    *为了方便把链式队列的头指针和尾指针定义成结构体
    */
    typedef struct {
    LQNode *front;
    LQNode *rear;
    }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;
    }

  • 相关阅读:
    Linux问题分析或解决_samba无法连接
    Android系统编译环境及连接工具配置
    Linux问题分析或解决_ssh无法连接
    新能力| 云开发静态网站托管能力正式上线
    如何在云开发静态托管中使用Hugo
    如何在云开发静态托管绑定静态域名
    3步搞定图像盲水印?试试云开发扩展能力
    不再忍受龟速 Github,你也可以试试在云开发上部署个人博客!
    云开发 For Web:一站式开发下一代 Serverless Web 应用
    下笔如有神的程序员来教你写作啦!
  • 原文地址:https://www.cnblogs.com/qpxv/p/3758889.html
Copyright © 2011-2022 走看看