精华内容
下载资源
问答
  • [求助]关于堆栈中能获取当前栈的元素个数的问题下边的程序 是我在按书上的要求写出的程序#include "Stdio.h"#include "malloc.h"typedef struct node{ int data;struct node *next;}Lnode,*Linklist;Linklist ...

    [求助]关于堆栈中能获取当前栈的元素个数的问题

    下边的程序 是我在按书上的要求写出的程序

    #include "Stdio.h"

    #include "malloc.h"

    typedef struct node

    { int data;

    struct node *next;

    }Lnode,*Linklist;

    Linklist outlist(Linklist H)

    {

    Lnode *s;

    s=H;

    printf("the linklist is:");

    while (s)

    { printf("%d->",s->data);

    s=s->next;

    }

    printf("NULL\n");

    }

    Linklist creat(int flag)

    { Linklist H=NULL;

    Lnode *s;

    int x;

    printf("please input one date:");

    scanf("%d",&x);

    while (x!=flag)

    { s=malloc(sizeof(Lnode));

    s->data=x;

    s->next=H;

    H=s;

    outlist(H);

    printf("please input one date:");

    scanf("%d",&x);

    }

    return H;

    }

    int main(void)

    { Linklist H;

    int flag;

    printf("please input the end int:");

    scanf("%d",&flag);

    H=creat(flag);

    printf("the list is over!\n");

    getch();

    return 0;

    }

    已经调试通过

    现在老师要求我们在输入一个元素后能够显示出在栈中有多少个元素,请大侠能够指教指教

    展开全文
  • /* 建立一链式 */ include include include

    /*
    建立一个链式栈
    */

    include

    include

    include

    展开全文
  • 顺序,利用一组地址连续存数单元依次存放自底到栈顶数据元素,同时附设指针top指示栈顶元素在顺序位置,压栈、弹、获得栈顶元素、统计元素个数、打印中元素
  • 栈的介绍: 栈是一先入后出的有序列表 栈(stack)是线制性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(top),另一端为固定的一端,称为栈底...

    栈的介绍:

    1. 栈是一个先入后出的有序列表
    2. 栈(stack)是线制性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(top),另一端为固定的一端,称为栈底(Bottom)
    3. 栈和堆栈是同一个概念
    4. 最先放入栈中的元素在栈底,最后放入的元素在栈顶
    5. 删除元素:最后放入栈中的元素先删除,最先放入的最后删除
    6. 栈的使用场景:子程序的调用(在跳往子程序前,会先将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中),递归,表达式的转换与求值等

    示意图:

    在这里插入图片描述
    在这里插入图片描述
    栈的实现有两种方法,分别为采用数组来实现和采用链表来实现,这里我们采用数组来实现。

    解题思路:

    在这里插入图片描述

    1. 可以把数组的首元素当作栈底,同时记录栈中元素的个数size
    2. 如图,压栈的操作是把待压栈的元素放到数组arr[size]中,然后执行size++操作。
    3. 同2原理,弹栈操作是取数组arr[size-1]元素,然后执行size–操作。
    4. 根据以上分析可以很容易实现栈

    代码如下:

    package main
    
    import (
    	"errors"
    	"fmt"
    )
    
    //使用结构体管理栈
    type sliceStack struct {
    	arr       []interface{} //切片
    	stackSize int           //栈中元素的个数
    }
    
    //创建栈
    func newSliceStack() *sliceStack {
    	return &sliceStack{arr: make([]interface{}, 0)}
    }
    
    //判断是否为空
    func (p *sliceStack) isEmpty() bool {
    	return p.stackSize == 0
    }
    
    //栈的大小
    func (p *sliceStack) size() int {
    	return p.stackSize
    }
    
    //返回栈顶元素
    func (p *sliceStack) top() interface{} {
    	if p.isEmpty() { //说明栈为空
    		return nil
    	}
    	return p.arr[p.stackSize-1] //栈顶元素
    }
    
    //push栈元素
    func (p *sliceStack) push(t interface{}) {
    	p.arr = append(p.arr, t)
    	p.stackSize = p.stackSize + 1
    }
    
    //pop栈元素
    func (p *sliceStack) pop() interface{} {
    	if p.stackSize > 0 { //栈不为空时
    		p.stackSize--
    		element := p.arr[p.stackSize]
    		p.arr = p.arr[:p.stackSize]
    		return element
    	}
    	return errors.New("栈为空")
    }
    
    //显示栈的元素
    func (p *sliceStack) print() {
    	fmt.Println("栈当前的情况是")
    	if p.isEmpty() {
    		fmt.Println("当前栈为空")
    	}
    	for i := p.stackSize - 1; i > 0; i-- {
    		fmt.Println(i, "->", p.arr[i])
    	}
    }
    func main() {
    	var stack = newSliceStack()
    	if stack.isEmpty() {
    		fmt.Println("Stack为空! ")
    	} else {
    		fmt.Println("Stack不为空! ", stack.stackSize)
    	}
    
    	fmt.Println("\nstack增加字符串元素: ")
    	stack.push("中文元素")
    	stack.push("elem1")
    	stack.push(10)
    	stack.push(20)
    	stack.push(30)
    
    	stack.print()
    
    	fmt.Println("当前Size = ", stack.size())
    
    	fmt.Println("当前Top = ", stack.top())
    	fmt.Println("取出元素", stack.pop())
    	stack.print()
    //结果:
    //Stack为空!
    //
    //stack增加字符串元素:
    //栈当前的情况是
    //4 -> 30
    //3 -> 20
    //2 -> 10
    //1 -> elem1
    //当前Size =  5
    //当前Top =  30
    //取出元素 30
    //栈当前的情况是
    //3 -> 20
    //2 -> 10
    //1 -> elem1
    }
    
    
    
    展开全文
  • 栈的入栈出栈返回栈顶元素元素个数判空 #include <stdio.h> #include <stdlib.h> #include <string.h> //定义节点 typedef struct tag ... //栈中的元素个数 int size; }Stack,*pStack;

    栈的入栈出栈返回栈顶元素元素个数判空

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    //定义节点
    typedef struct tag
    {
      int val;
      struct tag *pNext;
    }Node,*pNode;//别名
    
    //定义栈
    typedef struct{
      //头指针
    	pNode phead;
    	//栈中的元素个数
    	int size;
    }Stack,*pStack;
    
    //栈是先进后出,入栈实现,头插法头删法
    void push(pStack p,int val)
    {
    	//calloc申请空间并同时赋值为0
    	pNode pnew=(pNode)calloc(1,sizeof(Node));
    	pnew->val=val;
    	//头插法  也是实现判断栈是否为空empty()
    	if(NULL==p->phead)
    	{
    	 //链表为空
    		p->phead=pnew;
    	}else{
    		pnew->pNext=p->phead;
    	    p->phead=pnew;
    	}
    	p->size++;
    }
    //出栈实现
    void pop(pStack p)
    {
    	//定义一个节点pcur接收要被free的phead
    	pNode pcur;
      //判断链表是否为空
    	if(NULL==p->phead)
    	{
    	   printf("stack is empty\n");
    	   return;
    	}
    	//头部删除
    	//返回栈顶元素:int top()
    	pcur=p->phead;
    	p->phead=p->phead->pNext;
    	p->size--;
    	free(pcur);
    	pcur=NULL;
    }
    int size(pStack p)
    {
      return p->size;
    }
    
    int main()
    {
    	//定义栈
    	Stack s;
    	int i,s_size;
    	//先将s内存清空为0
    	memset(&s,0,sizeof(s));
    	//循环每次把i放入栈
    	while(scanf("%d",&i)!=EOF){
    	   //入栈:push()
    		push(&s,i);
    	}
    	//出栈:pop()
    	pop(&s);
    	//返回栈中元素个数:size()
    	s_size=size(&s);
    	printf("s_size=%d\n",s_size);
    	system("pause");
    }
    
    展开全文
  • 辅助栈的栈顶元素,保存初始栈的栈顶元素并弹出,这时候需要将辅助栈里边大于保存元素全部压入初始栈,直到辅助栈为空或辅助栈的栈顶元素小于保存元素,此时再将保存元素压入辅助栈。 如此循环,直到初始栈...
  • 插入数据(入栈)、删除数据(出栈)、查看栈顶元素、返回元素个数;将元素推入队尾(尾插)、删除队头元素(头删)、查看队头、队尾元素 基本操作: import java.util.Arrays; public class Stack { ...
  • 有两个相同的栈,一个里面放着自大到小排列数,栈顶数最小,另一个是空。...stackA元素个数为N。 第1次操作:先取stackA栈顶元素,记为tmp,然后把剩余N-1个元素转移到stackB中,接着把tmp和st...
  • 给定一个初始为空的栈和一系列压栈、弹栈操作,请编写程序输出每次弹栈的元素栈的元素值均为整数。 输入格式: 输入第1行为1个正整数n,表示操作个数;接下来n行,每行表示一个操作,格式为1 d或0。1 d表示将整数d...
  • 给定一个初始为空的栈和一系列压栈、弹栈操作,请编写程序输出每次弹栈的元素栈的元素值均为整数。 输入格式: 输入第1行为1个正整数n,表示操作个数;接下来n行,每行表示一个操作,格式为1 d或0。1 d表示将整数...
  • //得到栈的元素个数 int StackLength(SqStack &sqstack) { return sqstack.realSize; } /*******************************主函数************************************************/ int main(int argc, char *...
  • 栈的结构体: typedef int SDataType; typedef struct Stack { SDataType* array; int capacity; int top; // 标记栈顶位置 }Stack; 初始化栈 : //初始化栈 void StackInit(Stack* ps) { ps->...
  • #define Stack_Size 20//定义最多能够存储的元素个数 typedef struct { int stacksize//当前已分配储存已使用空间 int *base//底指针 int *top;//整型变量top存储栈顶元素的下标,作为栈顶指针,top为-1...
  • 元素个数之和不为n时,两者不会上溢*/ #include #define n 6 typedef char ElemType; typedef int bool; ElemType A[n]; int top1=1;//1栈顶指针 int top2=n;//2栈顶指针 //永远都指向栈顶元素下一个位置 ...
  • 这道题目是关于单调栈的典型题目,我们只需要在栈中维护一递减的子序列即可,当发现栈顶元素小于当前遍历的元素的时候说明序列是递增的,这时候需要弹出栈顶的元素,当前遍历的元素下标减去栈顶元素的下标表示的...
  • 把这个值也压入辅助栈,接下来往数据栈中压入4,由于之前的3还是最小值,则4同样压入压入辅助栈(为了和数据栈元素个数相同),接着往数据栈中压入2,2小于之前的最小值3,则2也压入辅助栈,则辅助栈的栈顶就是最小值...
  • 设置两个,一个data用来压数据,另一个min用来同步的压当前元素中的最小值,当data压入一个数,min就比较当前数与min栈顶的元素,谁小压谁 #include<stack> #include <iostream> using ...
  • 数据结构中有一结论:对于n不同的元素进栈,将出栈顺序记录为一组元素序列,那么总共会有1n+1C2nn\frac{1}{n+1}C_{2n}^{n}n+11​C2nn​不同的出栈顺序的元素序列。 这结论的通俗理解(记忆)思路 ...
  • 很明显,数值只有五,然而size却是9。 思路就是,把打印出来,就能发现问题所在。 应该是null值不在调试值列表出现,但是真实存在。 编辑器一般是不会错,认真思考,才能找到答案。 ...
  • 实现一特殊的栈,在实现栈的基本功能的基础上,再实现返 回栈中最小元素的操作。 【要求】 1.pop、push、getMin操作的时间复杂度都是O(1)。 2.设计的栈类型可以使用现成的栈结构。 解题思路:设置两栈,data...
  • 算法-栈的出栈个数

    千次阅读 2018-03-18 09:12:13
    import java.math.BigInteger... n个元素的出栈次序 f(n)=f(0)*f(n-1)+f(1)*f(n-2)...+f(n-2)*f(1)+f(n-1)*f(0) 输出样例: 0:1 1:1 2:2 3:5 4:14 5:42 6:132 7:429 8:1430 9:4862 10:16796 11:58786 12:208012 13:742
  • 数字 x 的下一更大的元素是按数组遍历顺序,这数字之后的第一比它更大的,这意味着你应该循环地搜索它的下一更大的。如果不存在,则输出 -1。 示例 1: 输入: [1,2,1] 输出: [2,-1,2] 解释: 第一 1 的...
  • 有两相同的栈,一里面放着自大到小排列的数,栈顶的数最小,另一个栈是空。不允许利用其它数据结构,只能利用这两个栈,要求把第一个栈数字反过来,从小到大排列,结果还放在原来那个里面。 #...
  • 请利用两个栈S1和S2来模拟一个队列,   ...count(ST):ST栈的元素个数。 那么如何利用栈的运算来实现该队列的三个运算: enqueue:插入一个元素入队列; dequeue:删除一个元素出队列; queue_
  • 题目:有两相同的栈A和B,在A中存放着从大到小的数:1,2,3,4,5,栈顶为最小数1,另外一个栈B为空。现在要求不使用其他数据结构,将A中数字顺序倒过来,使其栈顶的数为最大值5。 解题思路: 这道题目有...
  • 已知要移除k个数,假设共有n个数,那么最后会保留n-k个数 核心思想就是要保留一个序列,不断将新数字放进去,让这个序列组成数字越小越好。想一想,应该是前面高位数字,越小越好,后面大一点问题到不大。...
  • Min一定要和Data元素个数相同,但是要保证一直压入最小元素 #include<iostream> #include<stack> using namespace std; class SpecialStack { public: stack<int> Data; stack<...
  • 实现一特殊功能的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。 示例1 输入 [[1,3],[1,2],[1,1],[3],[2],[3]] 返回值 [1,2] 备注: 有三种操作种类,op1表示push,op2表示pop,...
  • 题目:实现一特殊的栈,在实现栈的基本功能的基础上,再实现返 回栈中最小元素的操作。 【要求】 1.pop、push、getMin操作的时间复杂度都是O(1)。 2.设计的栈类型可以使用现成的栈结构。 设计思路: 1.为...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,003
精华内容 2,401
关键字:

栈的元素个数