苏嵌 项目实战
姓名:唐茂华
日期: 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语言当中进栈出栈的相关知识。
自我评价: