一.知识都在代码里面!
二.有四个文件
1queue.c
2.queue.h
3.main.c
4.makefile
三.代码
1.queue.h
#ifndef __QUEUE_H__
#define __QUEUE_H__
#define SIZE 10
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<stdbool.h>
#include<time.h>
typedef struct queue
{
int W[SIZE];
int front;
int back;
}queue,*pqueue;
queue* sxb_queue_init(); //队列初始化
bool sxb_queue_empty(queue *p); //判断队列是否为空
bool sxb_queue_full(queue *p); //判断队列是否满了
void sxb_queue_push(queue* p,int data); //入队列
void sxb_queue_pop(queue* p); //出队列
void sxb_queue_delete(queue* p); //清空队列的元素
void sxb_queue_print(queue* p); //打印队列的元素
#endif
queue.c
/************************************************************************************************************************************************************************************************************************
*文件名:
*作 者:She001
*时 间:
*版 本:
*作 用:
****************************************************************************************************************************************************************************************************************************/
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<stdbool.h>
#include<time.h>
#include"queue.h"
queue* sxb_queue_init()//队列初始化
{
queue* head =(queue*)malloc(sizeof(queue));
head->front=-1;
head->back=-1;
bzero(head->W,sizeof(head->W));
return head;
}
bool sxb_queue_empty(queue *p) //判断队列是否为空
{
if(p==NULL)
{
printf("传入的指针为空!\n");
}
if(p->back==-1&& p->front==-1)
{
return true;
}
if(p->back==p->front)
{
return true ;
}
return false;
}
bool sxb_queue_full(queue *p) //判断队列是否满了
{
if((p->back+1)%SIZE== p->front)
{
return true;
}
if(p->front==-1 && p->back==SIZE-2)
{
return true;
}
return false;
}
void sxb_queue_push(queue* p,int data) //入队列
{
if(sxb_queue_full (p))
{
printf("队列满了!\n");
return;
}
p->back =(p->back+1)%SIZE;
p->W[p->back]=data;
}
void sxb_queue_pop(queue* p) //出队列
{
if(sxb_queue_empty(p))
{
printf("队列空了!\n");
return ;
}
p->front=(p->front+1)%SIZE;
}
void sxb_queue_delete(queue* p) //清空队列的元素
{
p->front=-1;
p->front=-1;
}
void sxb_queue_print(queue* p) //打印队列的元素
{
for(int i=(p->front+1)%SIZE; i!=(p->back+1)%SIZE;i++)
{
printf("%d\t",p->W[i]);
}
printf("\n");
}
3.main.c
/************************************************************************************************************************************************************************************************************************
*文件名:
*作 者:She001
*时 间:
*版 本:
*作 用:
****************************************************************************************************************************************************************************************************************************/
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<stdbool.h>
#include<time.h>
#include "queue.h"
int main(int argc,char *argv[])
{
queue* q=sxb_queue_init();
for(int i=0;i<10;i++)
{
sxb_queue_push(q,i);
}
sxb_queue_print(q);
for(int i=0;i<12;i++)
{
sxb_queue_pop(q);
}
sxb_queue_print(q);
return 0;
}
4.makefile
queue_w: main.o queue.o
gcc -g -o queue_w main.o queue.o
main.o :main.c
gcc -g -c main.c -o main.o
queue.o : queue.c
gcc -g -c queue.c -o queue.o
四: 建议大家去看看大佬的, 这里有一个难点,在数组的有限空间利用 下的栈空,和栈满的判断。,我的代码没写很多注释 ,因为我解释不清!