3.9 队列的链式表示和实现

3.5.3 队列的链式表示和实现


适用于用户无法估计所用队列的长度,则适宜采用该类型的队列

  • 链式队列的结构图如下所示

  • 链队列的类型定义

    // 这里是定义是每个节点类型
    typedef struct Qnode{
      	QElemType data;
      	struct Qnode *next;
    }QNode,*QueuePtr;
    
    typedef struct{
      	QuenePtr front;	// 队头指针
      	QuenePtr rear;	// 队尾指针
    }LinkQueue;
    
  • 链队列运算指针变化

    • 空队列情况是:Q.front==Q.rear
    • 元素x入队列:Q.rear=x
    • y入队列:Q.rear=y;

链队列初始化

  • 【算法描述】

    Status InitQueue(LinkQueue &Q){
      	Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
      	if(!Q.front)
          	exit(OVERFLOW);
      	Q.front->next=NULL;
      	return OK;
    }
    

销毁队列

  • 【算法思想】从队头结点开始,依次释放所有结点

  • 【算法描述】

    Status DestroyQueue(LinkeQueue &Q){
      	QNode p;
      	while(Q.front){
          	p=Q.front->next;
          	free(Q.front);
          	Q.front=p;
        }
      	return OK;
    }
    

将元素e入队

  • 【算法思想】在队尾插入新元素

  • 【算法描述】

    Status EnQueue(LinkQueue &Q,ElemType e){
      	//QNode p=new QNode();
      	QNode p=(QueuePtr)malloc(sizeof(QNode));
      	p->data=e;
      	p->next=NULL;
      	Q.rear->next=p;
      	Q.rear=p;
      	return OK;
    }
    

链队列出队

  • 【算法思想】在队头进行删除元素

  • 【算法描述】

    Status DeQueue(LinkQueue &Q,ElemType &e){
      	// 首先是判断队列是否为空
      	if(Q.front==Q.rear)
          	return ERROR;
      	QNode p=Q.front->next;
      	Q.front=p->next;
      	free(p);
      	return OK;
    }
    

求链队列的队头元素

  • 【算法思想】查询队头元素的值

  • 【算法描述】

    Status GetHead(LinkQueue Q,QElemType &e){
      	if(Q.front==Q.rear)// 判断队列是否为空
          return ERROR;
      	e=Q.front->next->data;
    }
    
posted @   什么都会有的  阅读(96)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示