下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、java模拟栈和队列数据结构的基本示例讲解这篇文章主要介绍了 java模拟栈和队列数据结构的基本示例,栈的后进先出和队列的先进先 出是数据结构中最基础的知识,木文则乂对java实现栈和队列结构的方法进行了细分,需要的 朋友可以参考下栈和队列:一般是作为程序员的工具,用于辅助构思算法,生命周期较短,运行时才被创建;访问受限,在特定时刻,只有一个数据可被读取或删除;是一-种抽象的结构,内部的实现机制,对用户不可见,比如用数组、链表來实现栈。模拟栈结构同时,只允许一个数据被访问,后进先出对于入栈和出栈的吋间复朵度都为0(1),即不依赖栈内数据项的个数,操作比较快例,使用数组作为栈的存储结构publi
2、c class stacks<t> private int max; private t ary; private int top; /扌扌旨向栈 顶元素的卜标public stacks(int size) this.max = size; ary = (t) newobjectmax; top = -1;/ 入栈 public void push(t data) 讦(!isfull()ary+top = data; / 出栈 public t pop() 讦(isemptyo) returnnull; return arytop-; / 杳看栈顶 public t peek()
3、returnarytop; 栈是否为空 public boolean isempty() return top =栈是否满 public boolean isfull() return top = max - 1;/size publicint size() return top + 1;public static void main(string args)stacks<lnteger> stack = new stacks<lnteger>(3);for (int i = 0; i < 5; i+)stack.push(i);system.out.printl
4、n("size:" + stack.size(); for (int i = 0;i < 5; i+) integer peek = stack.peek();system.out.println("peek:” + peek);system.out.println("size:" + stack.size(); for (int i = 0; i < 5; i+) integer pop=stack.pop();system.out.pri ntln( "pop:” + pop);system.out.pri ntln
5、("size:" +stack.size();system.out.println("一一");for (int i = 5; i > 0; i-)stack.push(i);system.out.println(”size:” + stack.size(); for (int i = 5;i > 0; i-) integer peek = stack.peek();system.out.println("peek:" + peek);system.out.println("size:" + stack
6、.size(); for (int i = 5; i > 0; i-) integer pop=stack.pop();system.out.pri ntln ("pop:" + pop);system.out.pri ntln(”size:" +stack.size(); 上面的例了,冇一个maxsize的规定,因为数组是要规定大小的,若想无限制,可以使用其 他结构来做存储,当然也可以new 个新的长度的数组。public stackss() datas =public void push(t data)例,使用linkedlist存储来实现栈public
7、 class stackss<t> private linkedlist<t> datas; new linkedlist<t>(); 入栈datas.addlast(data); 出栈 public t pop() returndatas.removelast(); 查看栈顶 public t peek() returndatas.getlast(); 栈是否为空 public boolean isempty() returndatas.isempty(); /size public int size() return datas.size(); publ
8、ic static void main(string args) stacks<lnteger> stack = new stacks<lnteger(3); for (int i = 0; i < 5; i+) stack.push(i);system.out.pnntln(hsize:h +stack.size(); for (int i = 0; i < 5; i+) integer peek = stack.peek();system.out.pri ntlnpeek:11 + peek);system.out.printlncize:11 + stack
9、.size();for (int i = 0; i < 5; i+) integer pop = stack.pop();system.out.printlnpop:” +pop);system.out.pri ntln(' 'size:*' + stack.size();system.out.println("一一");for (int i = 5; i > 0; i-) stack.push(i);system.out.println(“size:” + stack.size(); for (int i = 5; i > 0;
10、i-) integer peek=stack.peek();system.out.pri ntln( hpeek:h + peek);system.out.pri ntln(' 'size:" +stack.size(); for (int i = 5; i > 0; i-) integer pop = stack.pop();system.out.printlncpop:1' + pop);system.out.println("size:” + stack.size(); 例,单词逆序,使用statck结构public class word
11、 reverse public static void main(string args) reverse株式会社static void reverse(string word) 讦(word = null) return;stackss<character> stack = new stackss<character>(); word.tochararray();int len = chararrayength;(chararrayi);char chararray = for (int i = 0; i vlen; i+ ) stringbuilder sb = n
12、ewstringbuilder();while ('stack.isemptyo) sb.append(stack.pop();system.out.printin("反转后:11 + sb.tostringo); 打印: 反转后:社会式株模拟队列(一般队列、双端队列、优先级队列)队列:先进先岀,处理类似排队的问题,先排的,先处理,后排的等前血的处理完了,再处理 对于插入和移除操作的时间复杂度都为0(1),从后而插入,从前而移除双端队列:即在队列两端都可以 insert 和 remove: insertleft> insertright, re move left &g
13、t; removeright 含有栈和队列的功能,如去掉insertleft removeleft,那就跟栈一样了;如去掉insertleft> removeright,那就跟队列一样了一般使用频率较低,时间复杂度0(1)优先级队列:内部维护一个按优先级排序的序列。插入时需要比较查找插入的位置,时间复杂度o(n), 删除0(1)/*队列 先进先出,一个指针指示插入的位置,一个指针指示取出数据项的位登*/public class queueqvt> private int max; private t ary; private int front; 队头指名十 指示取出数据项的位置
14、private int rear; /队尾指针指示插入的位置 private int nltems; 实际数据项个数public queueqfint size) this.max = size; ary =仃)newobjectmax; insert(t t) front = 0; rear = -1;nitems = 0; 插入队尾 public voidary+rear = t; n ltems+; 移除队头 aryfront+; if (front = max) /列队到尾了,public t remove) 从头开始t temp =front = 0;nltems-; return
15、temp;查看队头public t peek() return aryfront; public boolean isemptyf) return nitems = 0;public boolean isfull()return nitems = max;public int size() return nitems; public static void main(string args) for (int i = 0; i < 5; i+) queueq<lnteger> queue = new queueq<lnteger>(3);queue.i nsert
16、(i);system.out.pri ntln (“size:” +if (rear = max1) /已到实际队尾,从头开始rear = -1;queue.size(); for (int i = 0; isystem.out.pri ntlnpeek:" + peek);for (int i = 0; i < 5;i+) system.out.println(,remove:m + remove); system.out.pri ntlnr");forsystem.out.pri ntln (''size:11 + queue.size(); pe
17、ek 二 queue.peek();system.out.printl n(”size:" + queue.size(); remove = queue.remove);system.out.pri ntln (“size:" + queue.size();< 5; i+) integer peek = queue.peek();system.out.pri ntln(! 'size:'1 + queue.size();integer remove = queue.remove);system.out.pri ntlnf "size:&quo
18、t; + queue.size();(inti =5; i >0; i-)queue.insert(i);for (inti = 5;i >0;i-) integersystem.out.println(,peek:,+ peek);for (inti = 5;i >0;i-)integersystem.out.pri ntlnremove:”+ remove); /* 双端队列vspan style=l,white-space:pre,> </span>两端插入* 删除 */public classqueueqt<t> private link
19、edust<t> list;public queueqt() list = newlinkedlist<t>(); / 插入队头 public void insertleft(t t) list.addfirst(t); / 插入队尾 public void insertright(t t) list.addlast(t); / 移除队头public t removeleft() return list.removefirst(); / 移除队尾 public tremoveright() return list.removelast(); / 查看队头 public
20、t peekleft() return list.getfirst(); / 杏看队尾 public t peekright() returnlist.getlast(); public boolean isempty() return list.isempty(); public intsize() return list.size(); /*优先级队列 队列中按优先级排序,是一个有序的队列*/public class queueqp private int max; private int ary; private int nitems; 实际数据项个数publicqueueqp(int size) this.max = size; ary = new intmax;nitems =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业培训合作计划
- 2024出租车租赁经营合同企业租赁经营合同
- 2024室内装饰设计合同书样本
- 软件外包合同样本
- 社区停车位租赁合同范本
- 卖房代理合同格式
- 公司贷款偿还合同范例
- 专业摄影合作协议书模板
- 房屋租赁合同安全协议
- 房屋权益合法转让合同样本
- 体检报告汇总分析中风险的防范
- 村里建群管理制度
- 【城市轨道交通运营安全管理研究5300字】
- 2024年中核汇能有限公司招聘笔试参考题库含答案解析
- 上海市2024届高三7月模拟预测历史试题(等级考)(解析版)
- 肺炎护理查房课件
- 2024年中国华能集团招聘笔试参考题库含答案解析
- 服务质量的管理规定模版
- 部编《道德与法治》二年级上册教材解析及教学建议
- 2024年中考化学实验探究题说题
- 在高中语文课堂中开展爱国主义教育的策略探究获奖科研报告
评论
0/150
提交评论