首页 > 其他分享 >链队列的操作

链队列的操作

时间:2023-05-31 17:35:03浏览次数:30  
标签:QNode 队列 next return int front 操作 rear


链队列的基本操作:

#include <iostream>
#include <string.h>
#include <stdio.h>

using namespace std;

struct QNode
{
    int val;
    QNode *next;
};

struct LinkQueue
{
    QNode *front;
    QNode *rear;
};

int InitLinkQueue(LinkQueue *Q)
{
    Q->front=new QNode();
    if(Q->front!=NULL)
    {
        Q->rear=Q->front;
        Q->front->next=NULL;
        return 1;
    }
    return 0;
}

int EnterLinkQueue(LinkQueue *Q,int x)
{
    QNode *newNode = new QNode();
    if(newNode!=NULL)
    {
        newNode->val=x;
        newNode->next=NULL;
        Q->rear->next=newNode;
        Q->rear=newNode;
        return 1;
    }
    return 0;
}

int DelLinkQueue(LinkQueue *Q,int *x)
{
    if(Q->front==Q->rear) return 0;
    QNode *q=Q->front->next;
    Q->front->next=q->next;
    if(Q->rear==q)
        Q->rear=Q->front;
    *x=q->val;
    delete q;
    return 1;
}

int GetHead(LinkQueue Q,int *x)
{
    if(Q.front==Q.rear)
        return 0;
    *x=Q.front->next->val;
    return 1;
}

void ShowQueue(LinkQueue *Q)
{
    QNode *p=Q->front->next;
    if(p==NULL) return;
    while(p!=NULL)
    {
        printf("%d ",p->val);
        p=p->next;
    }
    cout<<endl;
}

int main()
{
    int n,x,v;
    LinkQueue Q;
    InitLinkQueue(&Q);
    scanf("%d",&n);
    for(int i=1; i<=n; i++)
    {
        scanf("%d",&x);
        EnterLinkQueue(&Q,x);
    }
    ShowQueue(&Q);
    if(GetHead(Q,&v) != 0)
        printf("%d\n",v);
    scanf("%d",&n);
    for(int i=1; i<=n; i++)
    {
        DelLinkQueue(&Q,&x);
        printf("%d ",x);
    }
    cout<<endl;
    ShowQueue(&Q);
    return 0;
}

 

标签:QNode,队列,next,return,int,front,操作,rear
From: https://blog.51cto.com/u_16146153/6388617

相关文章

  • 线性链表的基本操作
    线性链表常见的操作:插入,删除,查找等等。以下采用尾插法建立的线性链表。#include<iostream>#include<string.h>#include<stdio.h>usingnamespacestd;structnode{intval;node*next;};node*head,*p,*q;voidInit(){head=newnode();q=h......
  • HDU4546(优先队列)
    题目:比赛难度 题意:给一个整数序列,长度为n,求在这个序列的子序列中和为第m大的数。 分析:设置优先级队列{sum:当前和next:加入下个元素的和ith:将要考虑的下个元素}以next为优先级,小的先出队读入数据后排序,初始化队列第一个元素(0,a[0],0)每次出队一个元素......
  • Snap算法学习01-02关于net节点、边、权值、标签的读写操作——netinf中cascades层级信
      Model可选值—— 0:exponential,  1:powerlaw,  2:rayleigh"                                      ......
  • 使用python操作hdfs,并grep想要的数据
    代码如下:importsubprocessfordayinrange(24,30):forhinrange(0,24):filename="tls-metadata-2018-10-%02d-%02d.txt"%(day,h)cmd="hdfsdfs-text/data/2018/10/%02d/%02d/*.snappy"%(day,h)print(c......
  • python berkeley DB操作——打开btree索引文件中的database
    打开BDB中某个索引中的数据库代码: frombsddb3importdbimportbsddb3asbsddbprintdb.DB_VERSION_STRINGmydb=db.DB()mydb.open('your_btree_db_filename','databsename',dbtype=db.DB_BTREE)rec=cur.first()whilerec:#printkeyvaluepri......
  • MS SQL Server 中的存储过程是一种预编译的代码块,可以接收输入参数并返回输出结果,用于
    MSSQLServer中的存储过程是一种预编译的代码块,可以接收输入参数并返回输出结果,用于完成特定的数据库操作。它们是SQLServer中存储逻辑业务的一种常见方式。下面是存储过程的优势和劣势:优势:更高的性能:存储过程在首次执行时会被编译和优化,然后将编译后的执行计划缓存起来,......
  • 如何进行技术性操作实现监控视频资源的汇聚融合
    如何进行技术性操作实现监控视频资源的汇聚融合一、事件背景随着各行业数字化转型的不断推进,视频监控技术在行业内的安防应用及管理支撑日渐增多,但因前期规划不清晰、管理不到位等问题,视频监管系统普遍存在以下问题:1、各部门单位在视频平台建设中以所属领域为单位,系统孤立分散、统......
  • vue监听浏览器窗口大小变化,做对应的操作
    页面初始化mounted的时候,通过document.body.clientWidth和document.body.clientHeight获取到浏览器的宽和高,然后通过window.onresize来监听浏览器窗口的变化,在这里来改变我们的变量宽和高即可。(created()的时候不行,因为此时document还没有生成)<template><sectionclass="p-1......
  • nmap -A 启用操作系统和版本检测,脚本扫描和路由跟踪功能
    nmap-Axx.xx.IP.xxStartingNmap7.91(https://nmap.org)at2021-08-1810:13CSTNmapscanreportfor39.108.15.161Hostisup(0.075slatency).Notshown:989filteredportsPORTSTATESERVICEVERSION22/tcpopensshOpenSSH......
  • pandas groupby 分组操作
    最一般化的groupby方法是apply.tips=pd.read_csv('tips.csv')tips[:5]新生成一列tips['tip_pct']=tips['tip']/tips['total_bill']tips[:6]根据分组选出最高的5个tip_pct值deftop(df,n=5,column='tip_pct'):returndf.sort_index(by=colum......