day2-C语言实现队列

/*包含内容:
    结构、嵌套结构、结构指针
    malloc()声明内存空间
    free()释放内存空间
*/
#include  
#include 
#include 
#include 

//自定义队列存储数据类型
typedef int QDataType;
//自定义队列节点
typedef struct QueueNode
{
    QDataType val;//节点的值
    QueueNode* next;//下一个节点
}QueueNode;
//自定义队列
typedef struct Queue
{
    QueueNode* head;//队头
    QueueNode* tail;//队尾
    
}Queue;

//初始化队列
void QueueInit(Queue* pq){
    //防止指针为空
    assert(pq);
    //队头队尾置空
    pq->head = NULL;
    pq->tail = NULL;
}
//判断队列是否为空,即判断队头是否为空即可
bool QueueisEmpty(Queue* pq){
    assert(pq);
    return pq->head == NULL;
}
//取出队首元素
QDataType QueueFront(Queue* pq){
    assert(pq);//防止pq为空指针
    //防止队列为空
    assert(pq->head && pq->tail);
    return pq->head->val;
}
//入队操作,创建一个新的节点加到tail队尾指针即可。
//如果队列为空:head和tail都需要改变
//如果队列不为空,只需要改变tial即可
void QueueInsert(Queue* pq,QDataType x){
    assert(pq);//防止pq为空指针
    //分配内存创建新节点
    QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
    assert(newNode);//防止新节点的指针为空
    newNode->val = x;//新节点赋值
    newNode->next = NULL;//将新节点的下一个节点设为空,表明他是最后一个节点
    //队列为空的时候
    if((pq->head == NULL) && (pq->tial == NULL)){
        pq->head = newNode;
        pq->tail = newNode;
    }else{
        //队列不为空的时候
        pq->tail->next = newNode;
        pq->tail = newNode;
    }
}
//出队操作,也需要考虑队列是否为空的情况。不为空只需要改变头指针位置即可
//队列为空
void QueuePop(Queue* pq){
    assert(pq);//防止pq为空指针
    assert(pq->head && pq->tail);//防止空队列
    //队列非空时
    //先系住head指针的next指针,然后释放释放head所占的内存
    //java中JVM有垃圾回收机制,只需要断开指针(此处指针是虚拟的java中无指针)即可
    //C/C++里面需要自己释放内存
    QueueNode* next = pq->head->next;
    //释放head所占空间
    free(pq->head);
    //移动head指针
    pq->head =next;
}
//求队列元素个数
int QueueSize(Queue* pq){
    assert(pq);//防止pq为空指针
    int count = 0;
    //遍历队列求count
    QueueNode* cur = pq->head;
    while(cur){
        count++;
        cur = cur->next;
    }
    return count;
}
//清空队列
void QueueClear(Queue* pq){
     assert(pq);//防止pq为空指针
     QueueNode* cur = pq->head;
     while(cur){
        QueueNode* next = cur->next;
        free(cur);
        cur = next;
     }
    pq->head = NULL;
    pq->tail = NULL;
}

你可能感兴趣的:(算法笔记整理,c语言,算法)