数据结构中队列与栈的区别,从数据结构定义看,栈和队列都是

  数据结构中队列与栈的区别,从数据结构定义看,栈和队列都是

  这个还是目录栈栈的实现队列队列的实现最后

  (我老婆镇楼)

  菜鸡大学生摸了一个星期的鱼,又回来写博客了。

  其实是在忙程序设计作业。(顺便摸了一个星期的鱼)

  总之先把栈和队列写完。

  栈啥是栈呢?

  栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。

  进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出后进先出法的原则。

  压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。

  出栈:栈的删除操作叫做出栈。出数据也在栈顶。

  栈的实现栈可以由链表或者顺序表去实现,由于只在尾部进行操作,所以我们选择使用顺序表实现。

  又由于我们写过顺序表,我们就直接贴代码吧。

  # define _ CRT _ SECURE _ NO _ WARNINGS 1

  #包含标准视频

  #include assert.h

  #包含标准布尔

  typedef int STDataType

  数据类型说明结构堆栈

  {

  标准数据类型*数组

  int top//栈顶的位置

  (同Internationalorganizations)国际组织容量;//容量

  } ST

  //栈初始化

  无效堆栈单位(ST* ps)

  {

  assert(PS);

  PS-arr=NULL;

  ps-容量=0;

  PS-top=0;

  }

  //销毁栈

  无效堆栈库存

  {

  assert(PS);

  免费(PS-arr);

  PS-arr=NULL;

  ps-容量=0;

  PS-top=0;

  }

  //入栈

  void StackPush(ST* ps,STDataType x)

  {

  assert(PS);

  如果(ps- top==ps- capacity)

  {

  int newcapacity=ps- capacity==0?4 : ps-容量* 2;

  stdata type * tmp=(stdata type *)realloc(PS-arr,new capacity * sizeof(stdata type));

  if (tmp==NULL)

  {

  printf(失败!);

  退出(-1);

  }

  其他

  {

  PS-arr=tmp;

  PS-容量=新容量;

  }

  }

  PS-arr[PS-top]=x;

  PS-top;

  }

  //出栈

  无效堆栈弹出(ST* ps)

  {

  assert(PS);

  断言(PS-top 0);

  PS-top-;

  }

  //判断栈是否为空

  布尔堆栈

  {

  assert(PS);

  return PS-top==0;

  }

  //栈的大小

  (同Internationalorganizations)国际组织堆栈大小(ST* ps)

  {

  assert(PS);

  返回PS-top;

  }

  //返回栈顶元素

  标准数据类型堆栈顶部(ST* ps)

  {

  assert(PS);

  断言(PS-top 0);

  返回PS-arr[PS-top-1];

  }队列

  队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。

  队列具有先进先出先进先出的原则

  入队列:进行插入操作的一端称为队尾。

  出队列:进行删除操作的一端称为队头。

  队列的实现这次我们使用链表来实现队列。

  (如果使用数组的话出队列在数组头上出数据,效率会比较低)

  老样子,直接上代码:

  # define _ CRT _ SECURE _ NO _ WARNINGS 1

  #包含标准视频

  #include assert.h

  #包含标准布尔

  typedef int QDataType

  数据类型说明结构节点

  {

  QDataType数据;

  结构QNode *下一步

  } QNode

  数据类型说明结构队列

  {

  QNode * head

  QNode * tail

  }排队;

  //队列的初始化

  void QueueInit(Queue* pq)

  {

  断言(pq);

  pq-head=pq-tail=NULL;

  }

  //销毁队列

  void QueueDestory(Queue* pq)

  {

  断言(pq);

  QNode * cur=pq-head;

  while (cur)

  {

  QNode * next=cur-next;

  免费(cur);

  cur=下一个

  }

  pq-head=pq-tail=NULL;

  }

  //入队

  void QueuePush(Queue* pq,QDataType x)

  {

  断言(pq);

  QNode * new node=(QNode *)malloc(sizeof(QNode));

  断言(新节点);

  新节点-数据=x;

  new node-next=NULL;

  if (pq- tail==NULL)

  {

  assert(pq-head==NULL);

  pq-head=pq-tail=新节点;

  }

  其他

  {

  pq-tail-next=新节点;

  pq-tail=新节点;

  }

  }

  //出队

  void队列弹出(队列* pq)

  {

  断言(pq);

  assert(pq-tail pq-head);

  if (pq- head- next==NULL)

  {

  免费(pq-head);

  pq-head=pq-tail=NULL;

  }

  其他

  {

  q node * next=pq-head-next;

  免费(pq-head);

  pq-head=next;

  }

  }

  //判断队列是否为空

  布尔队列空(队列* pq)

  {

  断言(pq);

  return pq-head==NULL;

  }

  //队列长度

  尺寸_t队列大小(队列* pq)

  {

  断言(pq);

  QNode * cur=pq-head;

  int count=0;

  while (cur)

  {

  数数;

  cur=cur-next;

  }

  返回计数;

  }

  //返回队头元素

  QDataType队列前端(队列* pq)

  {

  断言(pq);

  断言(pq-head);

  返回pq-head-data;

  }

  //返回队列元素的尾部

  QDataType队列返回(Queue* pq)

  {

  断言(pq);

  断言(pq-tail);

  返回pq-tail-data;

  }最后感觉文笔比双链表更水…

  堆栈和队列。我感觉标题才是本质。

  Emmm,写下一个题目。

  毕竟这一周真的太忙了。

  拜拜。

  (立个旗,以后我每周画一幅。)

  转载请联系作者取得转载授权,否则将追究法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • mysql复合索引和组合索引,mysql组合索引数据结构
  • mysql复合索引和组合索引,mysql组合索引数据结构,Mysql之组合索引方法详解
  • mysql复合索引和组合索引,mysql复合索引数据结构
  • mysql复合索引和组合索引,mysql复合索引数据结构,MySQL的复合索引总结
  • b+树 多路搜索树,数据结构中树的分类
  • b+树 多路搜索树,数据结构中树的分类,数据结构-树(三):多路搜索树B树、B+树
  • avl树的构造,avl树特性,数据结构之AVL树详解
  • 数据结构c语言哈夫曼树,c语言哈夫曼树的构造,使用C语言详解霍夫曼树数据结构
  • c语言数据结构算法编程库,数据结构 c语言中文网
  • c语言数据结构算法编程库,数据结构 c语言中文网,C语言编程数据结构基础详解小白篇
  • c++纸牌游戏,数据结构纸牌游戏c语言
  • c++纸牌游戏,数据结构纸牌游戏c语言,C语言实战之纸牌游戏
  • ,,c#解析jobject的数据结构
  • ,,javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
  • ,,Java 数据结构与算法系列精讲之背包问题
  • 留言与评论(共有 条评论)
       
    验证码: