精华内容
下载资源
问答
  • #include "stdafx.h" #include <iostream> #include <stdlib.h> using namespace std;...///////////////////////////////////////////////..."栈空"<<endl; system("pause"); return 0; }
  • 问题:链表,,队列(循环队列)判定满或者空的条件?急求 1、为空条件 单链表:头结点指针域next == NULL 静态链表:数组最后一个元素值为0 循环链表:头结点的指针域指向它本身(循环查找时以p->next !=头结点...

    问题:链表,栈,队列(循环队列)判定满或者空的条件?急求

    1、为空条件

    单链表:头结点指针域next == NULL
    静态链表:数组最后一个元素值为0
    循环链表:头结点的指针域指向它本身(循环查找时以p->next !=头结点作为遍历结束条件)

    顺序存储时:top == -1
    链式存储时:top == NULL
    队列(队头出队、队尾入队)
    ①顺序存储

    队列 front == rear
    循环队列 front == rear
    ②链式存储
    链队列 front、rear均指向头结点

    2、为满条件

    单链表、循环链表:不存在
    静态链表:根据数组长度来判断

    顺序存储时:top==数组大小-1
    链式存储时:不存在
    队列
    ①顺序存储
    队列 可能假溢出
    循环队列 (rear+1)% QueueSize == front
    ②链式存储
    链队列 不存在

    展开全文
  • 2020-04-06 07:07:38
    栈 栈的定义:栈(stack)是限定仅在表位进行插入和删除操作的线性表。 允许插入和删除的一端被称为栈顶,另一端称为...用一个top变量来指示栈顶元素在数组中的位置,判定为栈空的条件是top==-1。 1.栈的结构定义 ...

    栈的定义:栈(stack)是限定仅在表位进行插入和删除操作的线性表。
    允许插入和删除的一端被称为栈顶,另一端称为栈底,不含任何数据元素的栈称为空栈。栈又称为后进先出的线性表,简称为LIFO结构。

    栈的抽象数据类型
    在这里插入图片描述
    注意:栈本身是一个线性表,所以线性表的顺序和链式存储他都适用。

    一.顺序结构

    用一个top变量来指示栈顶元素在数组中的位置,判定为栈空的条件是top==-1。

    1.栈的结构定义

        typedef int SElemType;//根据实际情况,不一定是int
        typedef struct
        {
            SElemType data[MAXSIZE];
            int top;
        }SqStack;
    
    

    进栈和出栈不在这里写了。

    2.两栈共享空间
    顺序存储结构有缺陷,那就是他必须在最开始就确定数组存储空间的大小,不够用只能靠编程手段来扩充容量。但对于两个相同类型的栈,我们可以最大限度的利用他们的空间来进行操作。

    我们的做法是将一个栈的栈底作为数组的始端(下标为0处),另一个栈为数组的末端(下标为n-1处)我们假设这两个栈分别为栈1和栈2,top1和top2为他们的栈顶指针,只要这两个指针不见面,这两个栈就可以一直使用,如下所示
    在这里插入图片描述
    虽然这个图上看上去像两个不同的栈合并到了一起,要有两个数组。其实不然,这是在一个数组上进行操作的。
    !!!这里有一点特别强调,判断栈1为空的条件只有top1==-1,判断栈2为空的条件只有top2 == n
    判断他们栈满的条件是 top1 + 1 == top2
    这个栈满中的栈指的是这个栈结构,不是单一的栈1或者栈2,栈1或者栈2满的条件是只要他们过了中间那处,他们就满了,当然top1==n-1是栈1也是满的,同理栈2也是。
    两栈共享空间的结构如下:

    typedef int Status
    typedef struct
    {
        SElemType data[MAXSIZE];
        int top1;
        int top2;
    }sqDoubleStack;
    

    两栈共享空间的push方法,除了要插入的元素值参数外,还需要一个判断是栈1还是栈2的栈号参数stackNumber
    push代码如下

    Status Push(SqDoubleStack *S,SElemType e,int stackNumber)
    {
        if(S->top1+1==S->top2)//栈满,不能加新元素
            return ERROR;
        if(stackNumber==1)//栈1有元素进栈
            S->data[++S->top1]=e;
        else if(stackNumber==2)
            S->data[--S->top2]=e;
        return OK;
    }
    

    Pop代码如下

    Status Pop(SqDoubleStack *S,SElemType e,int stackNumber)
    {
        if(stackNumber==1)
        {
            if(S->top1==-1)    //说明栈1已经是空栈了
                return ERROR; 
            *e=S->data[S->top1--];  //将栈1顶部元素出栈
        }
        else if(stackNumber==2)
        {
            if(S->top1==MAXSIZE)    //说明栈1已经是空栈了
                return ERROR; 
            *e=S->data[S->top2++];  //将栈1顶部元素出栈
        }
        return OK;
    }
    
    

    一般而言,使用这种数据结构,通常是当两个栈的空间需求有相反关系时,一方增一方减。除非情况特殊,一般不要使用,容易写混。

    二.链式结构

    栈的链式存储结构简称为链栈。
    对于链栈来说是不需要头结点的,定义一个top指针,指向链栈的栈顶。对于空栈来说,链表原定义是头指针指向空,那么来链栈的空其实就是top==NULL的时候。
    链栈的结构如下
    在这里插入图片描述
    ps.这里补充一下,这是我当时看到代码遇到的问题,是关于typedef后加指针的问题
    这里的LinkStackPtr由他所定义的东西,相当于定义了一个指向struct stackNode结构的指针。
    LinkStackPtr a等价于 struct stackNode *a

    链式结构的进栈出栈操作如下图所示
    进栈
    在这里插入图片描述
    在这里插入图片描述
    出栈
    在这里插入图片描述
    最后总结一下,当元素个数不确定时最好用链栈,否则用顺序栈会好一些。

    本片文章参考自《大话数据结构》程杰 清华大学出版社

    展开全文
  • 栈的顺序存储结构

    2019-03-20 21:46:02
    ` #include<stdio.h> #include<malloc.h> #define MaxSize 50 typedef char ElemType; typedef struct { ElemType data[MaxSize];...(1)栈空的条件:s->top==-1。 (2)栈满的条件:s->top==M...

    `

    #include<stdio.h>
    #include<malloc.h>
    #define MaxSize 50
    typedef char ElemType;
    typedef struct
    {
    ElemType data[MaxSize];
    int top;
    }SqStack;

    (1)栈空的条件:s->top==-1。
    (2)栈满的条件:s->top==MaxSize-1(data数组的最大下标)
    (3)元素e的进栈操作:s->top++;
    s->data[s->top]=e;
    (4)出栈的操作:e=s->data[s->top];
    s->top- -;
    1.初始化栈

    void InitStack(SqStack &s)
    {
    s = (SqStack
    )malloc(sizeof(SqStack));
    s->top = -1;
    }

    2.销毁栈

    void DestroyStack(SqStack *s)
    {
    free(s);
    }

    3.判断栈是否为空

    bool StackEmpty(SqStack *s)
    {
    return s->top = -1;
    }

    4.进栈

    bool Push(SqStack*&s, ElemType e)
    {
    if (s->top == MaxSize - 1)
    return false;
    s->top++;
    s->data[s->top] = e;
    return true;
    }

    5.出栈

    bool Pop(SqStack *&s, ElemType e)
    {
    if (s->top == -1)
    return false;
    e = s->data[s->top];
    s->top- -;
    return true;
    }

    6.取栈顶

    bool GetTop(SqStack *s, ElemType &e)
    {
    if (s->top == -1)
    return false;
    e = s->data[s->top];
    return true;
    }

    有错请指正!

    展开全文
  • (一)——栈的基本操作

    千次阅读 2014-07-28 21:52:34
    1.栈的简介 栈是一种后入先出的数据结构,一般包含两...栈空的条件:top == bottom 栈满的条件:top == maxsize-1 2.有数据序列1 2 3一次存入一个栈stack中,则出栈顺序可以为以下四种: 1,2,3; 2,1,3; 3,2,1; 1,3,
    1.栈的简介
    栈是一种后入先出的数据结构,一般包含两种最基本的操作:入栈(push)和出栈(pop)。
    入栈操作:top指针上移,元素入栈。
    出栈操作:top指针下移。
    栈空的条件:top == bottom
    栈满的条件:top == maxsize-1
    2.有数据序列1 2 3一次存入一个栈stack中,则出栈顺序可以为以下四种:
    1,2,3; 2,1,3; 3,2,1; 1,3,2.

    3.任意输入一个十进制整数x(x<32768),输出x的二进制值。

    #include <stdio.h>
    
    #define MAXSIZE	15
    
    int main()
    {
    	int a[MAXSIZE];
    	int bottom, top;
    	int x;
    
    	bottom = top = -1;
    	printf("Please input x(0<=x<=32767):");
    	scanf("%d", &x);
    	while(x)
    	{
    		a[++top] = x%2;
    		x /= 2;
    	}
    	while(-1 != top)
    	{
    		printf("%d ", a[top--]);
    	}
    	printf("\n");
    
    	return 0;
    }
    4.判断一个C语言表达式的左右括号是否匹配,提示:将要判断的表达式用字符串输入。

    #include <stdio.h>
    
    #define MAXSIZE	100
    
    int main()
    {
    	char a[MAXSIZE];
    	int top = -1;
    	int i;
    
    	printf("Please input a expression:");
    	gets(a);
    	i = 0;
    	while(a[i])
    	{
    		if('(' == a[i])
    			top ++;
    		else if(')' == a[i])
    		{
    			if(-1 == top)
    				break;
    			else
    				top --;
    		}
    		i ++;
    	}
    
    	if('\0' == a[i] && -1 == top)
    		printf("Match.\n");
    	else
    		printf("Not match.\n");
    	return 0;
    }

    5.栈的基本操作——出栈和入栈

    #include <stdio.h>
    #include <malloc.h>
    
    typedef struct st
    {
    	int maxsize;
    	int top;
    	int *pstack;
    }stack;
    
    void create_stack(stack *s, int ms);
    void push(stack *s, int x);
    int pop(stack *s);
    void clear_stack(stack *s);
    
    int main()
    {
    	stack s;
    	int ms, i;
    	int a[] = {13, 17, 15, 25};
    	
    	printf("Please input stack size:");
    	scanf("%d", &ms);
    	create_stack(&s, ms);
    	for(i = 0; i < 4; i++)
    		push(&s, a[i]);
    	while(s.top != -1)
    		printf("%d ", pop(&s));
    	printf("\n");
    	clear_stack(&s);
    
    	return 0;
    }
    
    void create_stack(stack *s, int ms)
    {
    	s->maxsize = ms;
    	s->top = -1;
    	s->pstack = (int *)malloc(ms*sizeof(int));
    }
    
    void push(stack *s, int x)
    {
    	if(s->top < s->maxsize-1)
    		s->pstack[++s->top] = x;
    }
    
    int pop(stack *s)
    {
    	if(s->top != -1)
    		return s->pstack[s->top--];
    }
    
    void clear_stack(stack *s)
    {
    	s->maxsize = 0;
    	s->top = -1;
    	free(s->pstack);
    	s->pstack = 0;
    }
    展开全文
  • 是两个顺序栈,采用想向存储的方式 在入栈,出栈,取栈顶...两个栈空的条件:top=-1;top2=stacksize; #include<iostream> using namespace std; const int StackSize=100; template<class DataType&...
  • 栈空:top==-1 栈满:top==maxsize-1 链栈 栈空:s->next==NULL 栈满:不存在 环形队列 队空:p->front==p->rear 队满:(p->rear+1)%maxsize==p->front 链队 队空:q->rear==NULL 队满:不存在
  • 不带头结点的单链表lst为空的条件是lst=NULL,进栈和出栈操作都是在表头进行的 三、问题解答 void initStack(LNode *&lst){//初始化 lst=NULL; } int isEmptyl(LNode *lst){//判断是否为空 if(lst==NULL...
  • 熟练掌握栈类型的两种实现方法即两种存 储结构表示时的基本操作实现算法特别应 注意栈满和栈空的条件以及它们的描述方法 3.熟练掌握循环队列和链队列的基本操作实现 算法特别注意队满和队空的描述方法 重难点内容 ...
  • 栈和队列课件PPT下载 掌握栈和队列的特点,并能在相应的...熟练掌握栈的两种存储结构的基本操作实现算法,特别应注意栈满和栈空的条件; 熟练掌握循环队列和链队列的基本操作实现算法,特别注意队满和队空的条件;
  • 一实验目的和要求 (1)理解栈和队列的特征以及它们之间的差异知道在何时使用那种数据结构 (2)重点掌握在顺序栈上和链栈上实现栈的基本运算算法注意栈满和栈空的条件 (3)重点掌握在顺序队上和链队上实现队列的基本运算...
  • 数据结构笔记||

    2020-06-17 09:35:46
    栈空的条件:s->top==-1 栈满的条件:s->top==MaxSize-1(data数组的最大下标) 元素e的进栈操作:先将栈顶指针top增1,然后将元素e放在栈顶指针处 出栈操作:先将栈顶指针top处的元素取出放在e中,然后将栈顶...
  • 第三章 栈和队列 ... 注意栈满和栈空的条件以及它们的描述方法。 3.熟练掌握循环队列和链队列的基本操作实现算法,特别注意队满和队空的描述方法。 重难点内容:  顺序栈的相关操作
  • [数据结构]和队列

    2016-09-30 23:08:20
    第三章 栈和队列 学习提要: 1.掌握栈和队列这两种抽象数据类型的特点,并... 注意栈满和栈空的条件以及它们的描述方法。 3.熟练掌握循环队列和链队列的基本操作实现算法,特别注意队满和队空的描述方法。 重难点内容:
  • 栈与队列一样也是一种线性的数据结构,与队列不同的是栈是一种先进后出的结构,有点类似于现实中的弹夹,最后压进去的子弹总是最先被打出来,在计算机中...基于链表的栈没有栈满这一说,栈空的条件是头指针为NULL。...
  • vb 栈 基本概念 只允许在一端进行插入或者删除操作的线性表 栈的顺序存储结构 #include<stdio.h> #include<stdlib.h> /* 栈的顺序存储结构:通过数组...//初始化顺序栈令栈顶指向-1,也是栈空的条件 }
  • 分析 以123为例,假如123在一个队列里,输入到中间,通过中间输出到右边队列中(这里用队列是为了方便输出,用数组储存也行) ...递归终止的条件是左队列和中间。代码如下。 代码部分 #include <iost...
  • 栈的知识点

    2019-02-12 11:16:38
    :只允许在一段进行插入或删除操作。...2.空栈判定条件通常为top==-1,满栈的判定条件通常为top=max-1,中数据元素个数为top+1 顺序操作 1.判: bool empty(stack s) { if(s.top==-1) return tru...
  • 1*二者区别* *队列是插入在一端进行而删除在另一端进行 ... 判断栈空的条件 top==-1 判断栈满的条件 top==maxStackSize-14链式栈是非顺序存储的,而队列是顺序存储和链式存放5**栈里进行运算使用后缀表达式。** A*
  • 栈的疑惑

    2020-03-21 22:37:52
    队列的指针 为什么队列的头指针指向队首元素的前一个位置。而队尾指针指向队尾元素? 因为想实现队和队满的条件. 队条件:Q.frontQ.rear; 队满条件:(Q.rear+1)%MaxsizeQ.front ...
  • 本关任务:实现顺序栈基本操作,包括栈初始化、置空栈、进栈、出栈、判栈空、栈输出(遍历)等。 相关知识: 为了完成本关任务,你需要掌握: - 顺序栈初始化 规定空栈时s->top=-1 - 进栈 进栈操作需要先...
  • 顺序栈的简单实现

    2017-07-16 21:53:49
    顺序栈需要牺牲一个地址空间来存放...栈空的判定条件:SqStack.base=SqStack.Top 栈不存在的判定条件:SqStack.base=NULL#include #include #include #define STACK_INIT_SIZE 100 #define STACK_INCREMENT 10 typ

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 639
精华内容 255
关键字:

栈空的条件