栈和队列的实现代码,栈和队列的实现实验总结

  栈和队列的实现代码,栈和队列的实现实验总结

  永远的神干货盘点

  @TOC

  一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作,进行数据插入和删除操作的一端称为栈顶,另一端称为栈底,栈中的数据元素遵循后进先出的原则。

  注意从栈顶入,栈顶出

  二、栈的实现(顺序表)

  1.函数的定义和结构体的创建——堆栈

  #杂注一次

  #包含标准视频

  #包含标准库

  #包含标准布尔

  #include assert.h

  整型数据类型;

  数据类型说明结构堆栈

  数据类型* a;

  栈顶

  (同Internationalorganizations)国际组织容量;

  void堆栈初始化(ST * p);

  无效堆栈推进(ST* p,数据类型x);

  int栈顶(ST * p);

  无效堆栈弹出(ST * p);

  int堆栈大小(ST * p);

  bool stackempty(ST * p);

  无效堆栈销毁(ST * p);

  2.函数的调用——测试c

  #includestack.h

  int main()

  意法半导体

  堆栈初始化(ST);

  stackpush( st,1);

  stackpush( st,2);

  stackpush( st,3);

  stackpush( st,4);

  而(!stackempty( st))//判断是否为空

  printf(%d ,栈顶(ST));//出栈

  堆栈弹出(ST);//移除栈顶元素

  堆栈销毁(ST);//内存销毁

  返回0;

  }

  3.栈的接口

  1.初始化

  void stackinit(ST* p)//栈的初始化

  断言(p);

  p-a=NULL

  p-top=0;

  p-容量=0;

  }

  无效堆栈推进(ST* p,数据类型x)//入栈

  断言(p);

  if (p- top==p- capacity)//扩容

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

  datatype * tmp=(datatype *)realloc(p-a,sizeof(datatype)*新容量);

  如果(tmp!=空)

  p-a=tmp

  p容量=newcapacity//扩容成原来的2倍

  p-a[p-top]=x;

  p-top;

  }

  3.移除栈顶元素

  无效堆栈弹出(ST* p)//移除栈顶元素

  断言(p);

  断言(顶部

  p-top-;

  }

  int stacktop(ST* p)//出栈

  断言(p);

  断言(顶部

  返回p-a[p-top-1];//顶部从0开始,每次入栈顶端都向后移,所以前一名是实际储存的元素

  }

  5.判断为空

  布尔堆栈属性(ST* p)//是否为空

  return p-top==0;//当栈中没有数据时,则为空,为真,否则为假。

  }

  6.栈中元素个数

  int stacksize(ST* p)//栈中元素个数

  断言(p);

  返回p- //虽然顶端是指向下一个,但是顶端从0开始,顶部正好是元素个数

  }

  7.内存销毁

  无效堆栈销毁(ST* p)//内存销毁

  断言(p);

  免费(p- //销毁动态开辟数组

  p-a=NULL

  p-top=0;

  p-容量=0;

  }

  只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出的原则。

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

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

  注意:对尾入,对头出

  四、队列的实现(链表)

  1.函数的定义和结构体的创建——队列。h

  #杂注一次

  #包含标准视频

  #包含标准库

  #include assert.h

  #包含标准布尔

  整型数据类型;

  数据类型说明结构队列节点

  数据类型数据;

  结构队列节点*下一个

  }队列节点

  数据类型说明结构队列

  队列节点*头

  队列节点*尾部

  }排队;

  void队列init(queue * p);

  void队列销毁(queue * p);

  void队列推送(队列* p,数据类型x);

  void队列弹出(queue * p);

  数据类型队列前端(queue * p);

  数据类型queue back(queue * p);

  int队列大小(queue * p);

  bool队列空(queue * p);

  2.函数的调用——测试c

  #包含" queue.h "

  int main()

  队列p;

  队列初始化(

  queuepush( p,1);

  queuepush( p,2);

  queuepush( p,3);

  queuepush( p,4);

  而(!queueempty( p))//判断为空

  数据类型front=队列前端(

  printf(%d ,front);

  队列弹出(

  queuedestroy( //内存销毁

  返回0;

  }

  3.取一级指针的原因

  正常来说,如果将头与尾巴放在队列节点内部,应该取二级指针,

  但是由于此时定义的是结构体为长队的变量,改变的是该变量的内部。

  所以只取一级指针就可以。

  4.队列的接口的实现

  1.初始化

  void queueinit(queue* p)//初始化队列

  断言(p);

  p-head=NULL;

  p-tail=NULL;

  }

  2.入队列

  void queuepush(queue* p,数据类型x)//入队列(队尾入)

  断言(p);

  队列节点*新节点=(队列节点*)malloc(sizeof(队列节点));

  新节点-数据=x;

  new node-next=NULL;

  if (p- tail==NULL)

  p-tail=新节点;

  p-head=新节点;

  其他

  p-tail-next=新节点;

  p-tail=新节点;

  }

  3.删除数据

  void queuepop(queue* p)//删除数据

  断言(p);

  断言(!队列空(p));//断言队列是否为空

  队列节点* next=p-head-next;

  免费(p头);

  p-head=next;

  if (p- head==NULL)//当删除只剩下最后一个节点时头与尾巴都指向,自由(头),尾巴就变成了野指针

  p-tail=NULL;

  }

  4.取对头数据

  数据类型队列前端(队列* p)//取队头数据

  断言(p字头);

  断言(!队列空(p));

  返回p头数据;

  }

  5.取队尾数据

  数据类型队列返回(队列* p)//取队尾数据

  断言(p字头);

  断言(!队列空(p));

  返回p尾数据;

  }

  6.取队的元素个数

  int queuesize(queue* p)//队的数量

  断言(p);

  int sum=0;

  队列节点* cur=p-head;

  而(cur!=空)

  总和;

  cur=cur-next;

  返回总和;

  }

  7.判断为空

  弯曲件队列空(队列* p)//判断队列是否为空

  断言(p);

  return p-head==NULL;

  }

  8.内存销毁

  void queuedestroy(queue* p)//内存销毁

  断言(p);

  队列节点* cur=p-head;

  而(cur!=空)

  队列节点* next=cur-next;

  免费(cur);

  cur=下一个

  p-head=NULL;

  p-tail=NULL;

  }

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

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: