链队列及其操作

问题: 跟之前想的不一样,以为就是个链表,结果实现时就出问题了。

     lqueue->rear要不断的后移***因此,每次入队的时候要找到lqueue->rear,因此每次入队是要后移lqueue->rear。^^

 

代码:

#include <iostream>
#include <cstdlib>
using namespace std;
 
typedef struct LinkQueue
{
    int data;
    struct LinkQueue *front;
    struct LinkQueue *rear;
}*LQueue;
 
void initLQueue(LQueue &lqueue)
{
    lqueue=(LQueue)malloc(sizeof(struct LinkQueue));
    if(!lqueue)
    {
        cout<<"allocate fail"<<endl;
        exit(-1);
    }
    else
    {
        lqueue->front=lqueue->rear=NULL;
    }
 
}
 
void enQueue(LQueue lqueue,int elem)      //入队
{
    LQueue node,temp;
 
    node=(LQueue)malloc(sizeof(struct LinkQueue));
    if(!node)
    {
        cout<<"allocate fail"<<endl;
        exit(-1);
    }
    else
    {
        node->data=elem;
        node->front=node->rear=NULL;
        if(lqueue->front==NULL)
        {
            temp=lqueue;
            temp->front=node;
            temp->rear=node;
        }
        else
        {
            temp=lqueue->rear;
            temp->rear=node;
            lqueue->rear=node;
        }
    }
}
 
int deQueue(LQueue lqueue)
{
    LQueue p;
    int elem;
    if(lqueue->front!=NULL)
    {
        if(lqueue->front->rear!=NULL)
        {
        p=lqueue->front;
        lqueue->front=p->rear;
        elem=p->data;
        free(p);
        }
        else
        {
            p=lqueue->front;
            elem=p->data;
            lqueue->front=lqueue->rear=NULL;
            free(p);
        }
        return elem;
    }
    return 0;
}
 
int GetHead(LQueue lqueue)
{
    int elem;
    if(lqueue->front!=NULL)
    {
        elem=lqueue->front->data;
        return elem;
    }
    return 0;
}
int main()
{
    LQueue lqueue;
    int arr[]={9,3,21,11,70,13,8,2,6};
    initLQueue(lqueue);
     
    for(int i=0;i<9;i++)
    {
        enQueue(lqueue,arr[i]);
    }
 
    cout<<"队头元素是 "<<GetHead(lqueue)<<endl;
    while(lqueue->front!=NULL)
      {
        cout<<deQueue(lqueue)<<" | ";
      }
    cout<<endl;
    return 0;
}

  

运行结果:

posted @   xshang  阅读(225)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示