数据结构队列的实现

hanyujianke 2020-02-25

声明:本文仅供交流学习使用,严禁利用所学技术违法犯罪,否则后果自负

循环队列问题

123456789101112131415161718192021222324252627282930
1,静态队列为什么必须是循环队列2,循环队列需要几个参数来确定    需要2个参数来确定2个参数不同场合有不同的含义    font和rear3,循环队列各个参数的含义    1),队列初始化        font和rear的值都是零    2),队列非空        font代表的是队列的第一个元素        rear代表的是队列的最后一个有效元素    3),队列空        font和rear相等,但是不一定是零4,循环队列入队伪算法    两步完成        1),将值存入r所代表的位置	        2),正确的写法:r = (r+1)%数组的长度        错误的写法:r = r+15,循环队列出队伪算法    f = (f + 1)% 数组的长度6,如何判断循环队列为空    如果front 与 rear 的值相等,即 f = r 该队列为空7,如何判断循环队列已满    两种方式:        1,多增加一个表标识参数        2,少用一个元素【通常用第二种方式】    1),如果r和f的值紧挨着,则表示队列已满    2),用c语言伪算法表示就是:        if((r+1)%数组长度 == f){以满}        else{不满}

程序实现

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
#include<malloc.h>typedef struct  //定义一个数据类型QUEUE{	int * pBase;	int front;	int rear;}QUEUE; 大专栏  数据结构队列的实现span>void init(QUEUE *); bool en_queue(QUEUE *, int val);//入队void traverse_queue(QUEUE *);//遍历队列bool full_queue(QUEUE *); //判断入队之前是不是已经满了bool out_queue(QUEUE *, int * ); //出队bool emput_queue(QUEUE *); //判断出队的时候是否为空int main(void){	QUEUE Q;	int val;	init(&Q);	en_queue(&Q,1);	en_queue(&Q,2);	en_queue(&Q,3);	en_queue(&Q,4);		if(out_queue(&Q,&val))	{		printf("出队成功,队列出队的元素是:%dn" , val);	}	else	{		printf("出队失败n");	}		traverse_queue(&Q);	return 0;}void init(QUEUE *pQ){	pQ->pBase = (int *)malloc(sizeof(int)*6);	pQ->front = 0;	pQ->rear  = 0;}bool full_queue(QUEUE *pQ){	if((pQ->rear +1)%6 == pQ->front)		return true;	else		return false;}bool en_queue(QUEUE * pQ, int val){	if(full_queue(pQ))	{		return false;	}	else	{		pQ->pBase[pQ->rear] = val;		pQ->rear = (pQ->rear + 1)%6;		return true;	}}void traverse_queue(QUEUE * pQ)//遍历队列{	int i = pQ->front;	while(i != pQ->rear)	{		printf("%d ",pQ->pBase[i]);		i = (i+1)%6;	}		}bool emput_queue(QUEUE *pQ){	if(pQ->front==pQ->rear)	{		return true;	}	else	{		return false;	}}bool  out_queue(QUEUE * pQ,  int * pVal){	if(emput_queue(pQ))	{		return false;	}	else	{		*pVal = pQ->pBase[pQ->front];		pQ->front = (pQ->front+1)%6;		return true;	}}
12
出队成功,出队元素是1,2,3,4

相关推荐