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

    #include<stdio.h>
    #include<stdlib.h>
    
    typedef struct node3
    {
        int nValue;
        struct node3 *pNext;
    }MyQueue;
    
    typedef struct node4
    {
        MyQueue *pHead;
        MyQueue *pTail;
        int nCount;
    }Queue;
    
    void q_Init(Queue **pQueue)//注意这里传的是二级指针,传一级的属于值传递,也可以选择不含参数,返回一个一级指针的做法
    {
        *pQueue  = (Queue*)malloc(sizeof(Queue));
        (*pQueue)->pHead = NULL;
        (*pQueue)->pTail = NULL;
        (*pQueue)->nCount = 0;
    }
    
    void q_Push(Queue *pQueue,int nNum)
    {
        if(pQueue == NULL)return;
    
        MyQueue *pTemp = NULL;
        pTemp = (MyQueue*)malloc(sizeof(MyQueue));
        pTemp->nValue = nNum;//队列实际上是尾插入头删除的单链表
        pTemp->pNext = NULL;
    
        if(pQueue->pHead == NULL)
        {
            pQueue->pHead = pTemp;
        }
        else
        {
            pQueue->pTail->pNext = pTemp;
        }
        pQueue->pTail = pTemp;
    
        pQueue->nCount++;
    }
    
    int q_Pop(Queue *pQueue)
    {
        if(pQueue == NULL || pQueue->nCount == 0)return -1;
    
        int nNum;
        MyQueue *pDel = NULL;
    
        pDel = pQueue->pHead;
        nNum = pDel->nValue;
    
        pQueue->pHead = pQueue->pHead->pNext;
        free(pDel);
        pDel = NULL;
        pQueue->nCount--;
        
        //只有一个元素被弹出之后 尾置空
        if(pQueue->nCount == 0)
        {
            pQueue->pTail = NULL;
        }
        return nNum;
    }
    
    int q_IsEmpty(Queue *pQueue)
    {
        if(pQueue == NULL)return -1;
        return pQueue->nCount == 0?1:0;
    }
    
    int main()
    {
        Queue *pQueue = NULL;
        q_Init(&pQueue);
        q_Push(pQueue,1);
        q_Push(pQueue,2);
        q_Push(pQueue,3);
        q_Push(pQueue,4);
    
        printf("%d
    ",q_Pop(pQueue));
        printf("%d
    ",q_Pop(pQueue));
        printf("%d
    ",q_Pop(pQueue));
        return 0;
    }
  • 相关阅读:
    原生js 异步请求,responseXML解析
    asp.net中Page.ClientScript.RegisterStartupScript用法小结
    asp.net 在repeater控件中加按钮
    无法打开物理文件 操作系统错误 5:拒绝访问 SQL Sever
    js 注册控件的onclick事件
    js控件设置只读属性和不可用属性
    js CheckBox只读
    js时间日期格式
    js正则判断日期
    UIPickerView的使用(三)
  • 原文地址:https://www.cnblogs.com/curo0119/p/7826806.html
Copyright © 2011-2022 走看看