苏嵌项目实战 学习日志3

苏嵌项目实战 学习日志3


姓名:王尹新叶

日期: 2018/09/05


今日学习任务
学习数据结构中队列的知识,并使用C语言实现了顺序队列的操作与链式队列的操作。


今日任务完成情况
理解了顺序队列的概念与链式队列的概念,并完成了相关代码。

课堂代码
queue.c

#include <stdio.h>
#include <stdlib.h>
#include "queue.h"

int InitQueue(Qu *q)
{
    Node *p = (Node *)malloc(sizeof(Node)); //申请头结点

    if (NULL == p)
    {
        return FAILURE;
    }
    p->next = NULL; //空队,没有下一个结点
    q->front = q->rear = p;

    return SUCCESS;
}

int EnterQueue(Qu *q, int e)
{
    if (NULL == q)  //入参判断
    {
        return FAILURE;
    }
    if (q->rear == NULL)
    {
        return FAILURE;
    }
    Node *p = (Node *)malloc(sizeof(Node));
    if (NULL == p)
    {
        return FAILURE;
    }
    p->data = e;
    p->next = NULL;
    q->rear->next = p;
    q->rear = p;
    return SUCCESS;
}

int LengthQueue(Qu q)
{
    int len = 0;
    Node *p = q.front->next;

    while (p)
    {
        len++;
        p = p->next;
    }
    return len;
}

int GetFront(Qu q)
{
    //如果是空队,没有队头元素,返回失败
    if (q.front == q.rear)
    {
        return FAILURE;
    }

    return q.front->next->data;
}

int DelQueue(Qu *q)
{
    if (NULL == q)
    {
        return FAILURE;
    }
    if (q->front == q->rear)
    {
        return FAILURE;
    }

    Node *p = q->front->next;   //保存第一个结点
    int e = p->data;
    q->front->next = p->next;
    free(p);
    if (q->rear == p)
    {
        q->rear = q->front;
    }

    return e;
}

int ClearQueue(Qu *q)
{
    if (NULL == q)
    {
        return FAILURE;
    }
    if (q->front == q->rear)
    {
        return SUCCESS;
    }

    Node *p = q->front->next;
    while (p)
    {
        q->front->next = p->next;
        free(p);
        p = q->front->next;
    }
    q->rear = q->front;

    return SUCCESS;
}

int DestroyQueue(Qu *q)
{
    if (NULL == q)
    {
        return FAILURE;
    }
    ClearQueue(q);
    free(q->front);

    q->front = q->rear = NULL;

    return SUCCESS;
}

queue.h

#include <stdio.h>
#include <stdlib.h>
#include "queue.h"

int InitQueue(Qu *q)
{
    Node *p = (Node *)malloc(sizeof(Node)); //申请头结点

    if (NULL == p)
    {
        return FAILURE;
    }
    p->next = NULL; //空队,没有下一个结点
    q->front = q->rear = p;

    return SUCCESS;
}

int EnterQueue(Qu *q, int e)
{
    if (NULL == q)  //入参判断
    {
        return FAILURE;
    }
    if (q->rear == NULL)
    {
        return FAILURE;
    }
    Node *p = (Node *)malloc(sizeof(Node));
    if (NULL == p)
    {
        return FAILURE;
    }
    p->data = e;
    p->next = NULL;
    q->rear->next = p;
    q->rear = p;
    return SUCCESS;
}

int LengthQueue(Qu q)
{
    int len = 0;
    Node *p = q.front->next;

    while (p)
    {
        len++;
        p = p->next;
    }
    return len;
}

int GetFront(Qu q)
{
    //如果是空队,没有队头元素,返回失败
    if (q.front == q.rear)
    {
        return FAILURE;
    }

    return q.front->next->data;
}

int DelQueue(Qu *q)
{
    if (NULL == q)
    {
        return FAILURE;
    }
    if (q->front == q->rear)
    {
        return FAILURE;
    }

    Node *p = q->front->next;   //保存第一个结点
    int e = p->data;
    q->front->next = p->next;
    free(p);
    if (q->rear == p)
    {
        q->rear = q->front;
    }

    return e;
}

int ClearQueue(Qu *q)
{
    if (NULL == q)
    {
        return FAILURE;
    }
    if (q->front == q->rear)
    {
        return SUCCESS;
    }

    Node *p = q->front->next;
    while (p)
    {
        q->front->next = p->next;
        free(p);
        p = q->front->next;
    }
    q->rear = q->front;

    return SUCCESS;
}

int DestroyQueue(Qu *q)
{
    if (NULL == q)
    {
        return FAILURE;
    }
    ClearQueue(q);
    free(q->front);

    q->front = q->rear = NULL;

    return SUCCESS;
}

main.c

#include <stdio.h>
#include <stdlib.h>
#include "queue.h"  


int main(void)
{
    Qu queue;   //创建一个队列
    int ret, i;

    ret = InitQueue(&queue);
    if (ret == FAILURE)         //返回值判断
    {
        printf("Init Failure!\n");
        exit(1);
    }
    else if (ret == SUCCESS)
    {
        printf("Init Success!\n");
    }

    for (i = 0; i < 10; i++)
    {
        ret = EnterQueue(&queue,i+1);
        if (ret == FAILURE)
        {
            printf("Enter failure!\n");
        }
        else if (ret == SUCCESS)
        {
            printf("Enter %d success!\n", i + 1);
        }
    }


    //获取队列的长度
    int length = LengthQueue(queue);
    printf("Length is %d!\n", length);

    //获取队头元素
    ret = GetFront(queue);
    if (ret == FAILURE)
    {
        printf("Get front failure!\n");
    }
    else
    {
        printf("Front is %d!\n", ret);
    }

    for (i = 0; i < 3; i++)
    {
        ret = DelQueue(&queue);
        if (ret == FAILURE)
        {
            printf("Delete failure!\n");
        }
        else
        {
            printf("Delete %d success!\n", ret);
        }
    }

    ret = ClearQueue(&queue);
    if (ret == FAILURE)
    {
        printf("Clear failure!\n");
    }
    else
    {
        printf("Clear Success!\n");
    }

    ret = DestroyQueue(&queue);
    if (ret == SUCCESS)
    {
        printf("Destroy success!\n");
    }
    else if (ret == FAILURE)
    {
        printf("Destroy failure!\n");
    }

    for (i = 0; i < 10; i++)
    {
        ret = EnterQueue(&queue, i + 1);
        if (ret == FAILURE)
        {
            printf("Enter failure!\n");
        }
        else if (ret == SUCCESS)
        {
            printf("Enter %d success!\n", i + 1);
        }
    }



    return 0;
}

今日开发中出现的问题汇总
链表理解起来有些难度。


今日开发收获
学习了链表,熟悉了C语言各种概念。


自我评价
基本完成任务目标,课后仍需继续努力。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值