学习日志03

学习日志03

姓名:刘抒文
日期:2018/09/05


今日学习任务:
今天学习了队列的顺序存储和链式存储。


今日任务完成情况:
与昨天的情况相比有了明显的改善,能较快的跟上老师讲课的节奏,但还是因为基础较差的原因,接受很慢。

main.c

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


int main()
{
    Q queue;        //创建一个队列
    int ret,i;     //声明变量ret i 数据类型 下面要用
    ret=InitQueue(&queue);    //初始化
    if(ret==FAILURE)
    {
        printf("init failure!\n");
    }
    else if (ret==SUCCESS)
    {
        printf("init success\n");
    }

    //进队操作
    for(i=0;i<5;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("get front is  %d \n",ret);
    }

    for (i=0;i<10;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");
    }


    length = LengthQueue(queue);       //以下测长和获取头元素 检测是否清空
    printf("Length is %d\n",length);

    ret = GetFront(queue);
    if(ret==FAILURE)
    {
        printf("get front failure!\n");
    }
    else
    {
        printf("get front is  %d \n",ret);
    }

    ret = DestoryQueue(&queue);
    if(ret==FAILURE)
    {
        printf("destory failure!\n");
    }
    else
    {
        printf("destory success\n");
    }
        //进队操作
    for(i=0;i<5;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;

queue.c

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

int InitQueue(Q *q)
{
    Node *p = (Node *)malloc(sizeof(Node));//申请头节点
    if(NULL==p)
    {
        return FAILURE;
    }
    p->next = NULL ;//空队,没有下一个节点
    q->front = q->rear = p;  //队头和队尾指针 都指向头节点

        return SUCCESS;
}

int EnterQueue(Q *q, int e)
{
    if(NULL==q) //入参判断
    {
        return FAILURE;
    }
    if (q->rear==NULL) //判断是否被销毁
    {
        return FAILURE;
    }

    Node *p = (Node *)malloc(sizeof(Node));    // Node *p 定义p为Node类型的指针     
    if(NULL==p) //入参判断
    {
        return FAILURE;
    }   
    p->data = e; //数据域
    p->next = NULL;//指针域 

    q->rear->next = p ;  //q->rear 即队尾指针
    q->rear = p;       //队尾指针向后移动
        return SUCCESS;

}

int LengthQueue(Q q)
{
    int len = 0 ;
    Node *p = q.front->next;
    while(p) //相当于 while(p != NULL)
    {
        len++;
        p = p->next;
    }
        return len;
}

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

int DelQueue(Q *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(Q *q)
{
    if (NULL == q)
    {
        return FAILURE;
    }
    if (q->front == q->rear)   //空队判断 
    {
        return SUCCESS;
    }

    Node *p=q->front->next;
#include<stdlib.h>
#include"queue.h"

int InitQueue(Q *q)
{
    Node *p = (Node *)malloc(sizeof(Node));//申请头节点
    if(NULL==p)
    {
        return FAILURE;
    }
    p->next = NULL ;//空队,没有下一个节点
    q->front = q->rear = p;  //队头和队尾指针 都指向头节点

        return SUCCESS;
}

int EnterQueue(Q *q, int e)
{
    if(NULL==q) //入参判断
    {
        return FAILURE;
    }
    if (q->rear==NULL) //判断是否被销毁
    {
        return FAILURE;
    }

    Node *p = (Node *)malloc(sizeof(Node));    // Node *p 定义p为Node类型的指针     
    if(NULL==p) //入参判断
    {
        return FAILURE;
    }   
    p->data = e; //数据域
    p->next = NULL;//指针域 

    q->rear->next = p ;  //q->rear 即队尾指针
    q->rear = p;       //队尾指针向后移动
        return SUCCESS;

}

int LengthQueue(Q q)
{
    int len = 0 ;
    Node *p = q.front->next;
    while(p) //相当于 while(p != NULL)
    {
        len++;
        p = p->next;
    }
        return len;
}

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

int DelQueue(Q *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(Q *q)
{
    if (NULL == q)
    {
        return FAILURE;
    }
    if (q->front == q->rear)   //空队判断 
    {
        return SUCCESS;
    }

    Node *p=q->front->next;
    while(p)   //p不为 0 时 循环
    {
        q->front->next == p->next;
free(p);
        p=q->front->next;
    }
    q->rear = q->front;

    return SUCCESS;

}

int DestoryQueue(Q *q)
{
    if (NULL==q)
    {
        return FAILURE;
    }
    free(q->front); //或者 free(q->rear)

    q->front = q->rear = NULL;  // 能防止变成 野指针 ?

    return SUCCESS;
}


queue.h

 #ifndef QUEUE_H
 #define QUEUE_H

 #define MAXSIZE  10
 #define SUCCESS  1000
 #define FAILURE  1001

struct node
{
    int data;               //数据域
    struct node *next;  //指针域
};                          //结构体大括号后面有分号

typedef struct node Node; //给结构体命名

struct queue
{
    Node *front;   //队头指针
    Node *rear; //队尾指针
};
typedef struct queue Q;

int InitQueue(Q *q);
int EnterQueue(Q *q, int e);
int GetFront(Q q);
int DelQueue(Q *q);
int ClearQueue(Q *q);
int DestoryQueue(Q *q);

 #endif

自我评价:
今日的学习效果还算可以。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值