队的顺序存储和链式存储

队的思想:先进先出。其他的东西不讲了,下面展示代码。

队顺序存储的实现:
# include <stdlib.h>
# include <iostream.h>

//宏定义
# define CHUZHI 10//初始队的大小
# define ZENGZHI 5 //为了不出现队溢出而出现

//队头的数据类型
struct queue
{
int * top;//存放队的尾
int * base;//存放队的头
int max;//存放队的大小
};

//初始化队
void chushihua(struct queue &q)
{
q.base=(int *)malloc(10 * sizeof(int));//给队开辟空间
if(q.base)//开辟是否成功
{//队头元素赋初值
q.top=q.base;
q.max=CHUZHI;
}
else
cout<<"内存空间不足!请关闭一些程序后在进行此操作!\n";
}

//进队函数
void inqueue(struct queue &q,int e)
{//判断队是否满了
if(q.top-q.base>=q.max)
{//队满后的操作
q.base=(int *)realloc(q.base,5+q.max);
q.top=q.base+q.max;
q.max=q.max+ZENGZHI;
}
*q.top=e;//元素进队
q.top++;//top指向队顶
cout<<"进队操作已完成!\n";
}

//出队函数
void outqueue(struct queue &q,int &e)
{
if(q.base!=q.top)
{//队不为空的操作
e=*(q.base);//元素出队
cout<<e<<"\n";//输出元素
q.base++;//队底地址的改变
}
else
cout<<"此队为空队!\n";
}

//主函数
void main()
{
int e;//存放出队和进队的值
int option;//存放用户的选项

struct queue q;//构造一个队
chushihua(q);//队的初始化操作

e=0;
option=0;
while(option!=3)
{
cout<<"\n\n\n\n 菜单\n";
cout<<" 1、进队\n";
cout<<" 2、出队\n";
cout<<" 3、退出\n";
cout<<"\n请选择操作码:";

cin>>option;


switch(option)
{
case 1:
cout<<"请输入进队的元素值:";
cin>>e;
inqueue(q,e);
break;
case 2:
outqueue(q,e);
break;
}
}
}

队的链式存储
# include <stdlib.h>
# include <iostream.h>

//定义结点数据类型
typedef struct Queue
{
int data;//存放数据
struct Queue * next;//存放下一个结点的地址
}*queue;

//定义头结点和尾结点的类型
typedef struct
{
queue top;//存放尾
queue base;//存放头
}Head;

//队头的初始化
void chushihua(Head &q)
{
q.base=(queue)malloc(sizeof(struct Queue));//开辟空间
q.top=q.base;//给对头中的元素赋初值
}

//进队操作
void inqueue(Head &q,int e)
{
queue p;//定义一个存放结点类型的指针
p=(queue)malloc(sizeof(struct Queue));//为p开辟空间
p->data=e;//把进队的元素存放在p所指空间的data项中
(q.top)->next=p;//把p插入到队中
q.top=p;
cout<<"进队成功!\n";
}

//出队操作
void outqueue(Head &q,int &e)
{
if(q.base!=q.top)
{//队不为空的操作
q.base=q.base->next;//元素出队,且base指向下一个地址
e=q.base->data;
cout<<"出队元素为:"<<e<<"\n";
}
else
{
cout<<"此队为空队!\n";
}
}


void main()

{
Head q;//定义一个队头
int e;//存放进队和出队的数据
int option;//存放用户的操作

chushihua(q);//队的初始化

option=0;
while(option!=3)
{
cout<<"\n\n\n\n 菜单\n";
cout<<" 1、进栈\n";
cout<<" 2、出栈\n";
cout<<" 3、退出\n";
cout<<"\n\n请选择您的操作:";
cin>>option;

switch(option)
{
case 1:
cout<<"请输入进队元素值:";
cin>>e;
inqueue(q,e);
break;
case 2:
outqueue(q,e);
break;
case 3:
break;

default:

break;

}
}
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值