队的顺序存储和链式存储

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

       队顺序存储的实现:
# 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;

        }
  }
}






  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值