姓名:刘抒文
日期:2018/09/05
今日学习任务:
今天学习了队列的顺序存储和链式存储。
今日任务完成情况:
与昨天的情况相比有了明显的改善,能较快的跟上老师讲课的节奏,但还是因为基础较差的原因,接受很慢。
main.c
#include
#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
自我评价:
今日的学习效果还算可以。