求无边春意融融 txt百度云绿门后百度云

Java栈之顺序栈存储结构实现
来源:博客园
一、栈的基本定义栈是一种数据结构,它代表一种特殊的线性表,这种线性表只能在固定一端(通常认为是线性表的尾端)进行插入、删除操作的特殊线性表,通常就是在线性表的尾端进行插入、删除操作。二、顺序栈的实现顺序栈是利用一组地址连续的存储单元依次存放从栈底到栈顶的数据元素,栈底位置固定不变,它的栈顶元素可以直接通过顺序栈底层数组的数组元素arr[size - 1]来访问。
1 package com.ietree.basic.datastructure.
3 import java.util.A
* Created by ietree
*/ 11 public class SequenceStack&T& { 12
private int DEFAULT_SIZE = 10; 14
// 保存数组的长度 15
private int 16
// 定义当底层数组容量不够时,程序每次增加的数组长度 17
private int capacityIncrement = 0; 18
// 定义一个数组用于保存顺序栈的元素 19
private Object[] elementD 20
// 保存顺序栈中元素的当前个数 21
private int size = 0; 22
// 以默认数组长度创建空顺序栈 24
public SequenceStack() { 25
capacity = DEFAULT_SIZE; 27
elementData = new Object[capacity]; 28
// 以一个初始化元素来创建顺序栈 32
public SequenceStack(T element) { 33
this(); 35
elementData[0] = 36
size++; 37
* 以指定长度的数组来创建顺序线性表 42
* @param element 指定顺序栈中第一个元素 44
* @param initSize 指定顺序栈底层数组的长度 45
public SequenceStack(T element, int initSize) { 47
this.capacity = initS 49
elementData = new Object[capacity]; 50
elementData[0] = 51
size++; 52
* 以指定长度的数组来创建顺序栈 57
* @param element 指定顺序栈中第一个元素 59
* @param initSize 指定顺序栈底层数组的长度 60
* @param capacityIncrement 指定当顺序栈底层数组的长度不够时,底层数组每次增加的长度 61
public SequenceStack(T element, int initSize, int capacityIncrement) { 63
this.capacity = initS 65
this.capacityIncrement = capacityI 66
elementData = new Object[capacity]; 67
elementData[0] = 68
size++; 69
* 获取顺序栈的大小 74
* @return 顺序栈的大小值 76
public int length(){ 78
* @param element 入栈的元素 87
public void push(T element) { 89
ensureCapacity(size + 1); 91
elementData[size++] = 92
* 确认数组的长度是否满足push之后的长度 97
* @param minCapacity 数组需要的最小长度 99
*/<span style="color: #0
public void ensureCapacity(int minCapacity) {<span style="color: #1 <span style="color: #2
// 如果数组的原有长度小于目前所需要的长度<span style="color: #3
if (minCapacity & capacity) {<span style="color: #4 <span style="color: #5
if (capacityIncrement & 0) {<span style="color: #6 <span style="color: #7
while (capacity & minCapacity) {<span style="color: #8
// 不断地将capacity长度加capacityIncrement<span style="color: #9
// 直到capacity大于minCapacity为止<span style="color: #0
capacity += capacityI<span style="color: #1 <span style="color: #2
}<span style="color: #3
} else {<span style="color: #4 <span style="color: #5
// 不断地将capacity * 2,直到capacity大于minCapacity为止<span style="color: #6
while (capacity & minCapacity) {<span style="color: #7 <span style="color: #8
capacity &&= 1;<span style="color: #9 <span style="color: #0
}<span style="color: #1 <span style="color: #2
}<span style="color: #3
elementData = Arrays.copyOf(elementData, capacity);<span style="color: #4
}<span style="color: #5 <span style="color: #6
}<span style="color: #7 <span style="color: #8
/**<span style="color: #9
* 出栈<span style="color: #0
*<span style="color: #1
* @return 出栈的元素<span style="color: #2
*/<span style="color: #3
public T pop() {<span style="color: #4 <span style="color: #5
T oldValue = (T) elementData[size - 1];<span style="color: #6
// 释放栈顶元素<span style="color: #7
elementData[--size] = null;<span style="color: #8
return oldV<span style="color: #9 <span style="color: #0
}<span style="color: #1 <span style="color: #2
// 返回栈顶元素,但不删除栈顶元素<span style="color: #3
public T peek() {<span style="color: #4 <span style="color: #5
return (T) elementData[size - 1];<span style="color: #6 <span style="color: #7
}<span style="color: #8 <span style="color: #9
// 判断顺序栈是否为空<span style="color: #0
public boolean empty() {<span style="color: #1 <span style="color: #2
return size == 0;<span style="color: #3 <span style="color: #4
}<span style="color: #5 <span style="color: #6
// 清空顺序栈<span style="color: #7
public void clear() {<span style="color: #8 <span style="color: #9
// 将底层数组所有元素赋值为null<span style="color: #0
Arrays.fill(elementData, null);<span style="color: #1
size = 0;<span style="color: #2 <span style="color: #3
}<span style="color: #4 <span style="color: #5
public String toString() {<span style="color: #6 <span style="color: #7
if (size == 0) {<span style="color: #8 <span style="color: #9
return "[]";<span style="color: #0 <span style="color: #1
} else {<span style="color: #2 <span style="color: #3
StringBuilder sb = new StringBuilder("[");<span style="color: #4
for (int i = size - 1; i & -1; i--) {<span style="color: #5
sb.append(elementData[i].toString() + ", ");<span style="color: #6
}<span style="color: #7
int len = sb.length();<span style="color: #8
return sb.delete(len - 2, len).append("]").toString();<span style="color: #9
}<span style="color: #0 <span style="color: #1
}<span style="color: #2 <span style="color: #3 }测试类: 1 package com.ietree.basic.datastructure. 2
* Created by ietree 5
*/ 7 public class SequenceStackTest { 8
public static void main(String[] args) {<span style="color: # <span style="color: #
SequenceStack&String& stack = new SequenceStack&String&();<span style="color: # <span style="color: #
stack.push("aaaa");<span style="color: #
stack.push("bbbb");<span style="color: #
stack.push("cccc");<span style="color: #
stack.push("dddd");<span style="color: #
System.out.println(stack);<span style="color: # <span style="color: #
System.out.println("访问栈顶元素:" + stack.peek());<span style="color: # <span style="color: #
System.out.println("第一次弹出栈顶元素:" + stack.pop());<span style="color: # <span style="color: #
System.out.println("第二次弹出栈顶元素:" + stack.pop());<span style="color: # <span style="color: #
System.out.println("两次pop之后的栈:" + stack);<span style="color: # <span style="color: #
}<span style="color: # <span style="color: # }程序输出:[dddd, cccc, bbbb, aaaa]访问栈顶元素:dddd第一次弹出栈顶元素:dddd第二次弹出栈顶元素:cccc两次pop之后的栈:[bbbb, aaaa]
免责声明:本站部分内容、图片、文字、视频等来自于互联网,仅供大家学习与交流。相关内容如涉嫌侵犯您的知识产权或其他合法权益,请向本站发送有效通知,我们会及时处理。反馈邮箱&&&&。
学生服务号
在线咨询,奖学金返现,名师点评,等你来互动您现在的位置: &
考点2:栈的顺序存储结构及其运算
全国计算机等级考试通关宝典:二级公共基础(2014版)_考点2:栈的顺序存储结构及其运算
栈的顺序存储结构是利用一组连续地址的存储单元来存储从栈底到栈顶的数据元素,同时附设一个指针top指示栈顶元素在顺序栈中的位置,一个指针base指示栈底元素的位置。top指针最开始指向栈底,当插入一个元素后,top指针加1;当删除一个元素时,top指针减1.base指针的值为NULL时,表示栈不存在。top的值等于base的值时,表示是空栈。在栈中,栈的插入和删除运算只能在栈顶进行,栈顶指针top动态反应了栈中元素的变化情况。  图1-2展示了顺序栈中数据元素与栈顶指针之间的对应关系。图1-2 &数据元素与栈顶指针的对应关系  例1.4.2 &下列关于栈的..
&&&主编推荐
&&&最新图书
&&&最新视频
&&&热门试卷
& & & & & & & &栈的顺序表示和实现_文档下载
亿万文档 免费下载
当前位置: &
& 栈的顺序表示和实现
栈的顺序表示和实现
栈的顺序表示与实现
/*编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:1.初始化顺序栈2.插入元素3.删除栈顶元素4.取栈顶元素5.遍历顺序栈6.置空顺序栈*/#include&stdio.h&#include&stdlib.h&#define MAXNUM 20#define ElemType int/*定义顺序栈的存储结构*/typedef struct{ElemType stack[MAXNUM];}SqS/*初始化顺序表*/void InitStack(SqStack *p){if(!p)printf(&内存分配失败!&);p-&top=-1;}/*入栈*/void Push(SqStack *p,ElemType x){if(p-&top&MAXNUM-1){p-&top=p-&top+1;p-&stack[p-&top]=x;}elseprintf(&Overflow! \n&);}/*出栈*/ElemType Pop(SqStack *p){ElemTif(p-&top&=0){x=p-&stack[p-&top];printf(&以前的栈顶数据元素%d已经别删除\n&,p-&stack[p-&top]);p-&top=p-&top-1;}else{printf(&Underflow! \n&);return 0;}}/*获取栈顶元素*/ElemType GetTop(SqStack *p){ElemTif(p-&top&=0){x=p-&stack[p-&top];printf(&\n栈顶元素为:%d\n&,x);}else{printf(&Underflow! \n&);return 0;}}/*遍历顺序表*/void OutStack(SqStack *p){printf(&\n&);if(p-&top&0)printf(&这是一个空栈\n&);for(i=p-&i&=0;i--)printf(&第%d个数据元素是:%6d\n&,i,p-&stack[i]);}/*置空顺序栈*/void setEmpty(SqStack *p){p-&top =-1;}/*主函数*/void main(){SqStack *q;ElemTprintf(&\n
第一次使用必须初始化! \n&);do{printf(&\n&);printf(&\n------------主菜单-------------\n&);printf(&\n
初始化顺序栈
\n&);printf(&\n
插入一个元素
\n&);printf(&\n
删除栈顶元素
\n&);printf(&\n
取栈顶元素
\n&);printf(&\n
置空顺序栈
\n&);printf(&\n
结束程序运行
\n&);printf(&\n--------------------------------\n&);printf(&请选择(1~6):&);scanf(&%d&,&cord);printf(&\n&);switch(cord){case 1:{q=new SqSInitStack(q);OutStack(q);}case 2:{printf(&请输入要插入的数据元素:a=&);scanf(&%d&,&a);Push(q,a);OutStack(q);}case 3:{
Pop(q);OutStack(q);}case 4:{GetTop(q);OutStack(q);}case 5:{setEmpty(q);printf(&\n顺序表被置空!\n&);OutStack(q);}case 6:exit(0);}}while(cord&=6);}
Word文档免费下载: (下载1-1页,共1页)
/* 数据结构C语言版 栈的顺序存储表示和实现 P46-P47 栈顶指针始终指向当前栈顶元素的下一个位置, 栈顶指针与栈底指针相同的为空栈。 编译环境:Dev-C++ 4.9...浙江大学城市学院实验报告课程名称 实验项目名称 学生姓名 实验成绩 实验 7 专业班级 数据结构基础 栈的顺序表示和实现 学号 日期 指导老师(签名 ) 一. 实验目的和...浙江大学城市学院实验报告课程名称 实验项目名称 学生姓名 实验成绩 实验七 专业班级 指导老师( 指导老师(签名 ) 数据结构基础 栈的顺序表示和实现 学号 日期 一....数学与计算科学学院 实验报告 实验项目名称 所属课程名称 实验类型实验日期 栈的顺序表示和实现 数据结构 验证型
班学姓成 级号名绩 信计 1201 ...栈的顺序表示和实现_计算机软件及应用_IT/计算机_专业资料。c语言 栈的顺序表示和实现/*题目要求:编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主...数学与计算科学学院 实验报告 实验项目名称 所属课程名称 实验类型实验日期 栈的顺序表表示和实现 数据结构 A 验证型
班学姓成 级号名绩 数计学院...(& } \n&); 试验二 栈和队列 \n&); \n&); 栈的顺序表示和实现 \n&); \n&); ***菜单***\n&); * 1 初始化栈 *\n&); * *\n&); * ...栈的顺序表示和实现_工学_高等教育_教育专区。浙江大学城市学院实验报告课程名称 实验项目名称 学生姓名 实验成绩 实验七 数据结构基础 栈的顺序表示和实现 学号 日...实验7 栈的顺序表示和实现_计算机软件及应用_IT/计算机_专业资料。浙江大学城市学院实验报告课程名称 实验项目名称 学生姓名 实验成绩 专业班级 实验七 数据结构基础...}

我要回帖

更多关于 绿门之后 百度云 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信