栈与队列,,,其实把链表,顺序表掌握了,就很easy。就是去掉了顺序表,链表的一些操作而已。。。。。。。。。。。。。。。。
下面是我写的循环队列(顺序)。在此与大家分享
今天看到一句话感觉不错(“write once, run everywhere”)
#ifndef _MY_QUEUE_H_
#define _MY_QUEUE_H_
/*顺序队列之循环队列 */
#define MAX_SIZE 10
typedef int ElemType;
typedef struct _queue
{
ElemType a[MAX_SIZE];
int head;
int tail;
}queue;
//基本算法:
//初始化空队列:
void init_queue(queue *p);
//销毁队列:
void destory_queue(queue *p);
//判断是否为空队列:
bool is_empty(queue *p);
//获得队头元素:
void get_head(queue *p,ElemType *e);
//入队:
void push_queue(queue *p,ElemType e);
//出队:
void pop_queue(queue *p,ElemType *e);
#endif
#include"my_queue.h"
#include<stdio.h>
#include<stdlib.h>
//初始化空队列:
void init_queue(queue *p)
{
if(p == NULL)
{
printf("the queue is not exist\n");
exit(1);
}
else
{
p->head = 0;
p->tail = 0;
}
}
//判断是否为空队列:
bool is_empty(queue *p)
{
return p->head == p->tail;
}
//获得队头元素:
void get_head(queue *p,ElemType *e);
//入队:
void push_queue(queue *p,ElemType e)
{
if(p->tail+1 == p->head )
{
printf("The queue is full,Please wait\n");
exit(0);
}
else
{
p->a[p->tail] = e;
p->tail = (p->tail+1)%MAX_SIZE;//
}
}
//出队:
void pop_queue(queue *p,ElemType *e)
{
if(!is_empty)
{
printf("error\n");
exit(1);
}
else
{
*e = p->a[p->head];
p->head = p->head +1 % MAX_SIZE ;//
}
}
//销毁队列:
void destory_queue(queue *p)
{
p->tail = 0;
p->head = 0;
}
#include"my_queue.h"
#include<stdio.h>
int main()
{
queue t;
int x;
init_queue(&t);
for(int i = 1;i<=11;i++)
{
push_queue(&t,i);
}
for(int i = 1;i<=10;i++)
{
pop_queue(&t,&x);
printf("%d\n",x);
}
destory_queue(&t);
return 0;
}