学习日志3

苏嵌 项目实战
姓名:唐茂华
日期: 2018.9.5
今日学习任务:学习c语言中队列的使用,队列的顺序存储和链式存储。
今日任务完成情况:完成进栈出栈的代码编写,了解数据结构的基本概念。
课后作业:
1.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"queue.h"
 #include<stdlib.h>
int InitQueue(Q * q)
{
    if( NULL == q)      //入参判断
    {
        return FAILURE;
    }
    q->data = (int *)malloc(sizeof(int)*MAXSIZE);
    if(NULL == q->data)
    {
        return FAILURE;
    }
    q -> front = q -> rear =0;
    return SUCCESS;
}
int EmptyQueue(Q q)
{
    return ((q.front == q.rear)? SUCCESS: FAILURE);
}
int EnterQueue(Q * q,int e)
{
    if(NULL == q) //入参判断
    {
        return FAILURE;
    }
    if((q -> rear+1)% MAXSIZE == q->front) //队满
    {
        return FAILURE;
    }
    q -> data[q ->rear] = e;
    q -> rear = (q ->rear +1) % MAXSIZE;

    return SUCCESS;
}
int LengthQueue(Q q)
{
    int len;
    len =(q.rear - q.front +MAXSIZE) % MAXSIZE;
    return len;
}
int GetFront(Q q)
{
    if(q.front == q.rear)
    {
        return FAILURE;
    }
    // 返回第一个元素
    return q.data[q.front];
}
int DelQueue(Q *q)
{
    if(NULL == q) //入参判断
    {
        return FAILURE;
    }
    if(q -> rear == q-> front) //空队
    {
        return FAILURE;
    }

    int e = q -> data[q -> front];
    q->front = (q -> front +1) % MAXSIZE;

    return e;
}
int ClearQueue(Q * q)
{
    if(NULL == q) //入参判断
    {
        return FAILURE;
    }
    //头指针和尾指针指向相同的位置
    q -> rear = q -> front;
    return SUCCESS;
}
int DestroyQueue(Q * q)
{
    if(NULL == q) //入参判断
    {
        return FAILURE;
    }
    free(q -> data); //释放空间

    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

今日未解决问题:不能独立编写程序。
今日收获:学习了C语言当中进栈出栈的相关知识。
自我评价:这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值