精华内容
下载资源
问答
  • 如何判断栈满了
    万次阅读
    2017-04-25 17:12:10

    顺序栈:使用一组连续的内存依次保存栈中的数据,定义一个top变量来保存栈顶序号。

    栈结构是“后进先出”的原则。

    栈的最基本操作有两个:push(入栈) + pop(出栈)


    import java.util.Scanner;
    
    /** 
    *  @author   LilyLee
     * @date     2017年4月25日
     * @time     下午4:25:15
     * @Version  1.0
     * @email    lilylee_1213@foxmail.com
     *
     */
    public class Mystack {
    
    	public static void main(String[] args) {
    		Stack_type st=new Stack_type();
    		Stack_Data data1=new Stack_Data();
    		Stack_type stack =st.STinit(); //初始化栈
    		Scanner sc=new Scanner(System.in);
    		System.out.println("input  name age end with name='0'"); //输入栈元素,以0结束
    		while(true){
    			Stack_Data sdata=new Stack_Data();
    			sdata.name=sc.next();
    			if(sdata.name.equals("0")){break;}
    			sdata.age=sc.nextInt();
    			st.PushST(stack, sdata);
    		}
    		String flag="1";
    		System.out.println("pop stack  end with 0");//输入任意非0元素完成弹栈
    		flag=sc.next();
    		while(!(flag.equals("0"))){
    			data1=st.PopST(stack);
    			if(data1==null){break;}
    			System.out.println(data1.name+" "+data1.age);
    			flag=sc.next();
    		}
    		System.out.println("End and Free");
    		st.STFree(st);
    		
    	}
    }
    
    class Stack_Data{
    	String name;
    	int age;
    }
    
    class Stack_type{
    	static final int MAXLEN=50; //定义栈的最大长度
    	Stack_Data[] data=new Stack_Data[MAXLEN+1];
    	int top;
    	
    	Stack_type STinit(){
    		Stack_type p;
    		
    		if((p=new Stack_type())!=null){  //申请栈内存
    			p.top=0;
    			return p;
    			}
    		return null;
    		
    	}
    	
    	boolean STIsEmpty(Stack_type s){  //判断栈是否为空
    		boolean t;
    		t=(s.top==0);
    		return t;
    	}
    	
    	boolean STIsFull(Stack_type s){  //判断栈是否已满
    		boolean t;
    		t=(s.top==MAXLEN);
    		return t;
    	}
    	
    	void STClear(Stack_type s){  //清空栈
    		s.top=0;
    	}
    	
    	void STFree(Stack_type s){ //释放栈所占用空间
    		if(s!=null){
    			s=null;
    		}
    	}
    	
    	int PushST(Stack_type s,Stack_Data data){
    		if((s.top+1)>MAXLEN){return 0;}  //栈溢出
    		s.data[++s.top]=data;
    		return 1;
    	}
    	
    	Stack_Data PopST(Stack_type s){
    		if(s.top==0){System.out.println("no elements!"); return null;} //栈为空,操作失败
    		return (s.data[s.top--]);
    	}
    	
    	Stack_Data PeekST(Stack_type s){
    		if(s.top==0){System.exit(0);}  //栈为空,操作失败
    		return (s.data[s.top]);
    	}
    	
    	
    }
    


    更多相关内容
  • 栈满的时候top等于数组长度-1,入栈就是top++,出栈就是top--;因为栈是先进后出,因此当我们遍历数组的时候需要逆向遍历。 代码如下: public class Zhan { private int maxsize; private int top; private...

    栈的特点就是先进后出,栈顶top设为数组的最后一个元素,当栈空的时候top==-;当栈满的时候top等于数组长度-1,入栈就是top++,出栈就是top--;因为栈是先进后出,因此当我们遍历数组的时候需要逆向遍历。

    代码如下:

    public class Zhan {
        private int maxsize;
        private int top;
        private int[] arr;
    
        public Zhan(int maxsize){
            this.maxsize=maxsize;
            arr=new int[maxsize];
            top=-1;
        }
    
        //判断栈为空
        public boolean isEmpty(){
            return top==-1;
        }
        //判断栈满
        public boolean isFull(){
            return top==maxsize-1;
        }
    
        //入栈
        public void add(int date){
            if (isFull()){
                System.out.println("栈满,不能添加数组");
            }else {
                top++;
                arr[top]=date;
            }
        }
    
        //出栈
        public int delete(){
            if (isEmpty()){
                System.out.println("栈空,无数据可出!");
                return 0;
            }else{
                top--;
                return arr[top];
            }
        }
    
        //遍历
        public void bianliprint(){
            if (isEmpty()){
                System.out.println("栈为空,无法打印!");
            }else {
                for (int i=top;i>=0;i--){
                    System.out.println(arr[i]);
                }
            }
        }

    栈的测试类:

    public class ZhanTest {
        public static void main(String[] args) {
            Zhan z=new Zhan(4);
            z.add(1);
            z.add(2);
            z.add(3);
            z.add(4);
            z.bianliprint();
        }

    运行结果如下:

    展开全文
  • 数据结构 主讲人章万静 目录 栈实验-判断栈满操作 算法分析 Part 01 一算法分析 栈在什么情况下是满栈 top指向最后一个进栈数据时就是满栈即top是否等于STACKSIZE-1 #define STACKSIZE 6 //顺序栈有6个空间 int top=...
  • 数据结构 主讲人章万静 顺序栈判断栈满 32 2 41 位置1 位置2 位置3 位置4 位置5 位置6 s[0] s[1] s[2] s[3] s[4] s[5] 栈底 判断顺序栈是否已满需要考虑top与栈最大空间之间的关系 如图顺序栈最大有6个空间可以存放6...
  • 数据结构 主讲人章万静 否 是 开始 结束 top==MAX-1 栈顶元素下标top 顺序栈最大空间MAX 定义变量 栈已满 栈没满 顺序栈判断栈满 顺序栈判断栈满 顺序栈判断栈满很重要在进栈操作之前必须要进行判断 顺序栈判断栈满...
  • 判断顺序栈栈满的两种方式

    千次阅读 2022-01-05 21:56:49
    判断顺序栈栈满的两种方式

    判断顺序栈栈满的两种方式

    展开全文
  • 数据结构——共享栈的栈满条件判断

    万次阅读 多人点赞 2020-09-08 09:42:04
    共享栈判断栈满的条件,即判断两个栈顶的位置的状态,其根本是由两个栈顶指针的操作方式决定的。 用入栈操作来说有以下两种操作方式:(1)栈顶指针先加1,再赋值,那么栈顶指针所指的地方是最后入栈的元素(2)若先...

    共享栈判断栈满的条件,即判断两个栈顶的位置的状态,其根本是由两个栈顶指针的操作方式决定的。
    用入栈操作来说有以下两种操作方式:(1)栈顶指针先加1,再赋值,那么栈顶指针所指的地方是最后入栈的元素(2)若先赋值,栈顶指针再加1,则指针指向的位置是在最后入栈元素的后面1位,指向的地方为空值

    由此导致下面可能发生的四种情况:
    (1)初始值:top0=-1,top1=maxsize ,栈顶指针先加1(top1为减一),再赋值
    图一
    (2)初始值:top0=-1,top1=maxsize-1,top0先加1再赋值,top1先赋值,再减1
    图二
    (3)初始值:top0=0,top1=maxsize,top0先赋值再加1,top1先减1再赋值
    图三
    (4)初始值:top0=0,top1=maxsize-1,栈顶指针先赋值再加1(top1为减一)
    图四

    展开全文
  • 试编写双栈初始化,判断栈空、栈满、进栈和出栈等算法的函数。 #include<iostream> using namespace std; typedef struct { int top[2], bot[2]; int *V; int m; }DblStack; void ShowM
  • 判断栈满:如果栈顶指针地址-栈底指针的值等于栈的尺寸,就是栈空状态。 因为指针是往下一个内存空间移动的,所以两个指针地址相减得出的是两个指针的距离(整形数据)。判断栈空:如果栈顶指针地址等于栈底指针,...
  • 是一种运算受限的线性表,仅允许在一段进行元素的插入和删除操作,最后入栈的元素最先出栈,最先入栈的元素最后出栈,即 “先入后出”(FILO)或 “后入先出”(LIFO)。 自定义类。 class Stack(object): ...
  • 编写程序,用数组分别建两个堆栈共享,输入一序列整数,将奇数和偶数分别存放在两个栈中,栈满后打印。注释清晰,适合小白。
  • 栈与队列--判断栈/队列为空/

    万次阅读 多人点赞 2016-06-28 10:24:15
    数组栈 ...完成int IsFull(Stack S)函数,该函数判断栈是否已,如果返回1,否则返回0。typedef int ElemType; struct StackRecord; typedef struct StackRecord *Stack; struct StackRecord {
  • 数据结构——共享栈算法的栈满问题

    千次阅读 多人点赞 2018-07-15 03:13:21
    一、共享栈的优点 ...判断栈满的条件,就是判断两个栈顶的位置的状态,其根本原因是由两个栈顶指针的操作方式决定的。 用入栈操作来说:①栈顶指针先加1,再赋值,那么栈顶指针所指的地方,则最...
  • 栈满:top==maxsize-1 链栈 栈空:s->next==NULL 栈满:不存在 环形队列 队空:p->front==p->rear 队满:(p->rear+1)%maxsize==p->front 链队 队空:q->rear==NULL 队满:不存在
  • :是一种思想,实现将数据以先进后出(FILO:first in last out)方式操作 一、模型:井口 二、数据类型: //宏: #define MAXSIZE 10 //重命名:将int取一个别名:StackType typedef int StackType; //...
  • 数据结构—共享

    2021-08-09 09:31:22
    数据结构-栈(Ⅳ) 共享栈 利用栈底位置相对不变的特性,可让两个顺序栈共享一个一维数组空间,将两个栈的栈底分别设置在共享空间的两端...栈满条件:top0==top1-1。 元素x进栈操作:进栈=操作为top0++;data[top0]=x;
  • 各种数据结构空,条件判断

    千次阅读 2018-10-14 08:35:14
    由于链式存储是随意乱放,随意申请的存储结构,因此单链表,循环链表,双向链表皆不存在的情况。 1、单链表 (不带头结点)空:head==NULL (带头结点)空:head->next==NULL 2、循环链表 空:head->next...
  • 问题:链表,,队列(循环队列)判定或者空的条件?急求 1、为空条件 单链表:头结点指针域next == NULL 静态链表:数组最后一个元素值为0 循环链表:头结点的指针域指向它本身(循环查找时以p->next !=头结点...
  • 文章目录双向顺序栈双向栈在一维数组中的实现栈的结构体定义识别左右栈判断栈满共享栈的基本操作:初始化共享栈的基本操作:入栈共享栈的基本操作:出栈链栈的实现链栈的基本操作接口链栈的基本操作初始化入栈出栈取...
  • 栈(stack)是一种只能在一端插入或删除操作的线性表。(既操作受限的线性表) ...链栈的优点是不存在栈满上溢的情况 规定,链式栈的所以操作都是在单链表的表头进行的(因为给定链式栈以后,我们可以知道头结点的...
  • 2015-09-21 22:29:24
    的运算和基本概念  (stack)是一种只允许在一段进行插入和删除的线性表,它是一种操作受限的线性表。表中只允许插入和删除的一端称为顶端(top),另一端称为底端(buttom)。的插入操作通常称为进栈入栈(push)...
  • (这样实现的链表/堆栈 的空类型 判断 打印操作都比较方便) 【带头节点(不存放普通数据得)的引入是为了对链表删除、逆向、建立的时候操作更统一,不用专门对第一个元素单独处理。】 3、大部分程序用带头节点来...
  • } } //满栈的时候 int stack_full(MYSTACK *pstack) { /* if(NULL == pstack) { puts("stack is not exist"); return -1; }*/ if(pstack->count == pstack->size) { return 1; } else { return 0; } } //压栈 int...
  • ~C语言~简单实现(附代码)

    千次阅读 多人点赞 2021-11-03 08:51:54
    初始化 入栈 出栈 获取栈顶元素 获取中有效元素个数 检测是否为空 销毁 一道经典的用实现的OJ题 的概念及结构:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行...
  • 数据结构 -链栈及基本操作

    千次阅读 2022-03-20 16:10:59
    的定义二.的特点三.的理解四.链栈引入五.链栈定义六.链栈的结构体设计七.链栈的基本操作7.1链栈的初始化7.2链栈判空7.3链栈入栈7.4链栈出栈 一.的定义 是限定仅在表尾进行插入和删除操作的数据结构(受到...
  • 的链式存储结构(链栈)

    千次阅读 2021-07-27 20:35:43
    的链式存储结构(链栈) 1.链栈的存储结构 typedef struct StackNode{ ElemType data; //结点的数据元素 struct StackNode *next; //结点的指针域 }StackNode,*LinkStack; //StackNode* (指针类型)为指向中...
  • 双栈的建立、判断栈空、栈满、插入和删除操作
  • 顺序与链栈的实现与区别

    千次阅读 2021-06-01 23:33:42
    顺序是指利用顺序存储结构实现的,即利用一组地址连续的存储单元依次存放自底到栈顶的数据元素,同时设有指针top指示栈顶元素在顺序中的位置;另设指针base指示底元素在顺序中的位置。当top和base的值...
  • 文档之共享

    千次阅读 2022-04-22 23:40:06
    共享是顺序的变种。利用底位置相对不变的特性,可以让两个顺序共享一个一维数组空间,将两个底分别设置在共享空间的两端,两个栈顶向共享空间的中间延申。
  • 1、下列关于叙述正确的是( )。 正确答案: D 你的答案: D (正确) 算法就是程序 设计算法时只需要考虑数据结构的设计 设计算法时只需要考虑结果的可靠性 以上三种说法都不对 解析:A:程序是数据结构+算法,错。 B...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 76,442
精华内容 30,576
热门标签
关键字:

如何判断栈满了