精华内容
下载资源
问答
  • 栈与队列--判断栈/队列为空/满

    万次阅读 2016-06-28 10:24:15
    完成int IsEmpty(Stack S)函数,该函数判断栈是否已,如果返回1,否则返回0。 完成int IsFull(Stack S)函数,该函数判断栈是否已满,如果满返回1,否则返回0。typedef int ElemType; struct StackRecord; ...

    数组栈
    完成int IsEmpty(Stack S)函数,该函数判断栈是否已空,如果空返回1,否则返回0。
    完成int IsFull(Stack S)函数,该函数判断栈是否已满,如果满返回1,否则返回0。

    typedef int ElemType;
    struct StackRecord;
    typedef struct StackRecord *Stack;
    struct StackRecord
    {
        int Capacity; //栈容量
        int Top; //栈顶,初始为1
        ElemType *Array;
    };
    
    int IsEmpty(Stack S)
    {
        if(S‐>Top==‐1)
        {
            return 1;
        } 
        else
        {
            return 0;
        }
    }
    int IsFull(Stack S)
    {
        if(S‐>Top==S‐>Capacity‐1)
        {
            return 1;
        } 
        else
        {
            return 0;
        }
    }

    链栈
    完成int IsEmpty(Stack S);函数,该函数判断栈S是否为空,空栈返回1,否则返回0,已知S是带头结点的链栈。

    typedef int ElemType;
    struct Node;
    typedef struct Node * PtrToNode;
    typedef PtrToNode Stack;
    struct Node
    {
        ElemType data;
        PtrToNode next;
    };
    
    int IsEmpty(Stack S)
    {
        return S‐>next==NULL?1:0;
    }

    数组队列
    完成int IsEmpty(Queue Q);函数,该函数判断队列Q是否已空,如果已空返回1,否则返回0,其中Q是基于数组的非循环队列。
    完成int IsFull(Queue Q)函数,该函数判断队列Q是否已满,如果已满返回1,否则返回0,其中Q是基于数组的非循环队列。

    typedef int ElemType;
    struct QueueRecord;
    typedef struct QueueRecord * Queue;
    struct QueueRecord
    {
        int Capacity; //队列总容量
        int Front; //队首 初始值为0
        int Rear; //队尾,初始值为1
        int Size; //队列中数据数,初始值为0
        ElemType *Array;
    };
    
    int IsEmpty(Queue Q)
    {
        return Q‐>Size==0;
    }
    int IsFull(Queue Q)
    {
        return Q‐>Rear==Q‐>Capacity‐1?1:0;
    }

    链队列
    完成int IsEmpty(Queue q)函数,该函数判定基于链表的队列q是否为空,空队列返回1,非空队列返回0,其中q是不带头节点的链表队列。

    typedef int ElemType;
    struct node;
    typedef struct node Node;
    struct queue;
    typedef struct queue * Queue;
    struct node
    {
        ElemType data;
        Node * next;
    };
    struct queue
    {
        Node * front; //队首
        Node * rear; //队尾
        int size; //队列中数据数int IsEmpty(Queue q)
    {
        return q‐>size==0?1:0;
    }
    展开全文
  • :是一种思想,实现将数据以先进后出(FILO:first in last out)方式操作 一、模型:井口 二、数据类型: ... //重命名:将int取一个别名:StackType typedef int StackType; //的类型: struc...

    栈:是一种思想,实现将数据以先进后出(FILO:first in last out)方式操作

    一、模型:井口

    二、数据类型:
            //宏:
            #define MAXSIZE  10
            //重命名:将int取一个别名:StackType
            typedef int StackType;
            //栈的类型:
            struct stack
            {
            //数据:
                    StackType buf[6];       //栈的元素
            //方法
                    short top;              //栈顶下标
            };
      三、功能:
        1、初始化InitStack
        2、清空栈:ClearStack
        3、出栈:pop
        4、进栈:push
        5、判断栈为满:IsFull
        6、判断栈为空:IsEmpty
        7、取次栈顶
        8、栈的元素个数:StackLength

    四、栈的应用:撤消与恢复,记忆,递归,高级功能计算

     

    栈的代码详解、将二进制结果取出,实现代码如下

    #include<stdio.h>
    //宏
    #define MAXSIZE 32
    #define FALSE 0
    #define TRUE 1
    //重命名:将char取一个别名:StackType
    typedef char StackType;
    typedef char BOOL;
    //栈的类型;
    struct st
    {
    //数据
    	StackType buf[MAXSIZE];//栈的元素
    //方法
    	short top;//栈顶下标
    };
    //重命名:
    typedef struct st stack;//将struct stde 类型取别:stack
    
    /*功能:初始化栈
     *函数名:InitStack
     *返回值:void
     */
    void InitStack(stack *p)
    {
    	p->top=-1;
    }
    
    /*功能:判断栈为满
     *函数名:IsFull
     *返回值:为满——真1,非满——假0
     */
    BOOL IsFull(stack *p)
    {
    	if(MAXSIZE-1==p->top)
    	{
    		return TRUE;
    	}else
    	{
    		return FALSE;
    	}
    }
    
    /*功能:判断栈为空
     * 函数名:IsEmpty
     *返回值:为空——真1,非空——假0
     */
    BOOL IsEmpty(stack *p)
    {
    	if(-1==p->top)
    	{
    		return TRUE;
    	}else
    	{
    		return FALSE;
    	}
    }
    /*功能:进栈
     *函数名:push
     *返回值:成功TRUN 失败FALSE
     *注:不能为满,否则进栈失败
     */
    BOOL push(stack *p,StackType data)//p=&s
    {
    //判断栈是否为满
    	if(TRUE==IsFull(p))//为满
    	{
    		return FALSE;//返回失败
    	}
    	p->buf[++p->top]=data;
    	return TRUE;//返回成功
    }
    /*功能:出栈
     *函数名:pop
     *返回值:出栈成功TRUE 失败FALSE
     */
    BOOL pop(stack *p,StackType *pd)
    {
    //判断是否为空,为空出栈无意义
    	if(TRUE==IsEmpty(p))
    	{
    		return FALSE;//出栈失败
    	}
    	*pd=p->buf[p->top--];//优先级->大于--
    	return TRUE;//出栈成功
    }
    void main()
    {
    //定义变量:类型 变量名
    //struct st s;
    	struct st s;//分配空间
    	//初始化
    	InitStack(&s);
    	int num=0;
    	printf("请输入");
    	scanf("%d",&num);
    	//求二进制
    	while(num!=0)
    	{
    	//将余数入栈
    		if(FALSE==push(&s,num%2))
    		{
    			return;//结束
    		}
    		num/=2;
    	}
    	//将二进制结果取出来
    	char value=0;
    	while(FALSE!=pop(&s,&value))
    	{
    		printf("%d",value);
    	}
    	printf("\n");
    }

     

    展开全文
  • 将编号0和1的两个存放于一个数组空间V[m]中,底分别处于数组的两端。当第0号的栈顶指针top[0]等于-1时该栈为空;当第1号的栈顶指针top[1]等于m时,该栈为空。两个均从两端向中间增长。试编写双栈初始化,...

    将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端。当第0号栈的栈顶指针top[0]等于-1时该栈为空;当第1号栈的栈顶指针top[1]等于m时,该栈为空。两个栈均从两端向中间增长。试编写双栈初始化,判断栈空、栈满、进栈和出栈等算法的函数。

    在这里插入图片描述

    #include<iostream>
    using namespace std;
    typedef struct {
    	int top[2], bot[2];
    	int *V;
    	int m;
    }DblStack;
    void ShowMenu() {
    	cout << "************下面我们开始设计双栈************" << endl;
    	cout << "****************0.双栈初始化****************" << endl;
    	cout << "****************1.插入数据******************" << endl;
    	cout << "****************2.删除数据******************" << endl;
    	cout << "****************3.打印数据******************" << endl;
    	cout << "****************本实验仅进行一次************" << endl;
    }
    //初始化一个大小为m的双向栈
    void InitDblStack(DblStack &S) {
    	cout << "请输入双栈的大小" << endl;
    	cin >> S.m;
    	//动态分配一个最大容量为m的数组空间
    	S.V = new int[S.m];
    	//左栈栈底指针
    	S.bot[0] = -1;
    	//右栈栈底指针
    	S.bot[1] = S.m;
    	//左栈栈顶指针
    	S.top[0] = -1;
    	//右栈栈顶指针
    	S.top[1] = S.m;
    	system("pause");
    	system("cls");
    }
    //向指定的i号栈中插入元素
    void DblPush(DblStack &S) {
    	int i = 0;
    	int j = 0;
    	int flag=0;
    	int *x = new int();
    	cout << "请输入您要插入数据的栈号" << endl;
    	cin >> i;
    	//判断栈号是否输入错误
    	if (i < 0 || i>1) 
    		cout << "栈号输入错误" << endl;
    	//向0栈插入数据,反之向1栈插入数据
    	if (i == 0) {
    		cout << "您要在此栈插入数据的个数" << endl;
    		cin >> j;
    		for (int t = 0;t < j;t++) {
    			cout << "插入第" << (t + 1) << "个数" << endl;
    			cin >> *x;
    			//判断栈是否已满
    			if (S.top[0] + 1 == S.top[1]) {
    				cout << "双栈已满,无法再继续添加数据" << endl;
    				flag=1;
    				}
    			else
    				S.V[++S.top[0]] = *x;
    			if(flag==1break;
    		}
    	}
    	else {
    		cout << "您要在此栈插入数据的个数" << endl;
    		cin >> j;
    		for (int t = 0;t < j;t++) {
    			cout << "插入第" << (t + 1) << "个数" << endl;
    			cin >> *x;
    			if (S.top[0] + 1 == S.top[1]){
    				cout <<"双栈已满,无法插入该数据" << endl;
    				flag=1;
    				}
    			else
    				S.V[--S.top[1]] = *x;
    			if(flag==1)	
    			    break;
    		}
    	}
    	delete x;
    	system("pause");
    	system("cls");
    }
    
    //删除指定的i号栈的栈顶元素,用x返回其值
    void DblPop(DblStack &S){
    	int i,j;
    	cout << "您需要删除哪号栈的栈顶元" << endl;
    	cin >> i;
    	cout << "您需要删除几个数" << endl;
    	cin >> j;
    	for (int t = 0;t < j;t++) {
    		if (S.top[i] == S.bot[i])
    			{
    			    cout << "该栈已为空栈" << endl;
    			    break;
    			    }
    		if (i == 0)
    			S.V[S.top[0]--];
    		else
    			S.V[S.top[1]++];
    	}
    	system("pause");
    	system("cls");
    }
    void PrintDblStack(DblStack &S) {
    	if (S.top[0] == S.bot[0])
    		cout << "第0栈为空栈。无法打印" << endl;
    	else {
    		cout << "第0栈的数据" << endl;
    		for (int i = 0; i < S.top[0] - S.bot[0];i++)
    		{
    			cout << S.V[i];
    			cout << " \t";
    		}
    		cout << endl;
    	}
    	if (S.top[1] == S.bot[1])
    		cout << "第1栈为空栈。无法打印" << endl;
    	
    	else {
    		cout << "第1栈的数据" << endl;
    		for (int i = S.m;i > S.top[1];i--)
    		{
    			cout << S.V[i - 1];
    			cout << "\t";
    		}
    		cout << endl;
    	}
    	//本实验打印后就退出
    		system("pause");
    		exit(0);
    }
    int main() {
    	DblStack S;
    	int i;
    	while (1) {
    		ShowMenu();
    		cout << "请选择你的操作" << endl;
    		cin >> i;
    		switch(i)
    		{
    			case 0:{
    				//初始化双向栈
    				InitDblStack(S);
    				break;
    				}
    			case 1:{
    				//给栈添加数据
    				DblPush(S);
    				break;
    				}
    			case 2:{
    				//删除栈中数据
    				DblPop(S);
    				break;
    				}
    			case 3:{
    				//打印数据
    				PrintDblStack(S);
    				break;
    				}
    			default:
    				break;
    		}
    		}
    	}
    }
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    本代码仅是为了完成数据结构的作业,所以还不完善,见谅。
    。。。。。。。。
    其实是敲不动了
    。。。。。。。。

    展开全文
  • 假设栈S=(a1, a2, ….,a3),则称a1栈底元素,an栈顶元素,栈中元素按a1,a2,…,an的次序进栈,退栈的第一个元素应该栈顶元素。换句话说,栈的修改是按照先进后出的原则进行的,因此,栈又称为

    栈(stack)是限定仅在表尾进行插入或删除操作的线性表。因此,对栈来说,表尾端有其特殊含义,称为栈顶(top),相应的,表头端称为栈底(bottom)。不含元素的空表称为空栈。

    假设栈S=(a1, a2, ….,a3),则称a1为栈底元素,an为栈顶元素,栈中元素按a1,a2,…,an的次序进栈,退栈的第一个元素应该为栈顶元素。换句话说,栈的修改是按照先进后出的原则进行的,因此,栈又称为先进后出的线性表,(简称LIFO)结构,它的具体操作图示如下:

    这里写图片描述

    和线性表类似,栈也有两种存储表示
    1、顺序栈,即栈的顺序存储结构是利用一组地址连续的存储单元依次存储自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的为位置。通常的习惯做法是以top = -1表示栈为空。
    2、链式栈:我会在下一篇博客里介绍。嘿嘿

    下面晒出我的顺序栈的综合操作的代码,仅供参考学习。
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述

    程序运行结果

    这里写图片描述

    展开全文
  • 此时的出来的元素一个是字符串的尾端的字符,一个是字符串首端的字符,就将两者进行比较 若相等就继续循环判断;若不相等就可以直接判断回文字符串 */ #include<stdio.h> #include<stdlib.h> #...
  • 顺序的基本操作实现---入栈、出栈、判断是否为空 本身就比较简单,的基本概念推荐文章:http://blog.csdn.net/hguisu/article/details/7674195 实现代码如下: stack.h 的头文件: #pragma once #...
  • #include #include typedef struct Node { ... clear()清空 if(pop(&S, &val)) //val用于保存出栈的数值 printf("ok\n"); else printf("error\n"); traverse(&S); return 0; }  
  • 一,用一个数组实现两个(先进后出),有以下几种方法: ①数组的奇数位置存储一个栈的元素,偶数位置存储另一个栈的元素; ②两个分别从数组的中间向两头增长; 数组的中间位置看做两个底,压栈时栈顶...
  • 【数据结构】使用和队列判断字符串是否是回文

    万次阅读 多人点赞 2017-10-22 17:22:49
    说明:这是武汉理工大学计算机学院计科专业【数据结构】课程的实验:使用和队列判断字符串是否是回文 >>... 谨记:纸上得来终觉浅,绝知此事要躬行。...试写一个算法判别读入的一个以‘@’结束符的字符序...
  • JAVA顺序栈操作——初始化、入栈、出栈、判断空栈、判断栈满;顺序栈:使用一组连续的内存依次保存栈中的数据,定义一个top变量来保存栈顶序号。栈结构是“后进先出”的原则。
  • 使用平台:vs2013一个问题肯定不止一种解法,我下面给的是利用两个来求去中最小值,当然一个栈也可以求取问题。一个栈的求解这里就只给出思路。 一个栈求解:每次push,push两个值,当前要push的值,和最小值,...
  • 用两个模拟一个队列的运算

    千次阅读 2013-06-01 20:55:59
    原题:用两个模拟一个队列运算的基本思想是用一个栈作为输入,另一个栈作为输出。进队列时,将数据进入到作为输入的中。输出时,如果作为输出的,则从输入将已输入到中的所有数据输入到输出中,然后...
  • 各种数据结构,满条件判断

    千次阅读 2018-10-14 08:35:14
    、线性表 由于链式存储是随意乱放,随意申请的存储结构,因此单链表,循环链表,双向链表皆不存在满的情况。 1、单链表 (不带头结点):head==NULL (带头结点):head->next==NULL 2、循环链表 :...
  • 给出一个入栈序列,一个出栈序列。判断,是否存在合法的出入操作,满足这样的入栈序列和出栈序列。 思路:故事重现一遍,能顺利完成所有操作就存在,中间出现矛盾就不存在。所有数都要在里走一回。 如果...
  • 题目是这样描述的:输入两个整数序列,第一个序列表示的压入序列,请判断第二个序列是否的弹出序列,假设压入栈的所有数字均不相等。例如:入栈序列,1 2 3 4 5,判断4 5 3 2 1以及4 3 5 1 2是不是其弹出...
  • 千次阅读 2017-11-02 18:01:37
    一、的定义和运算 1.1 的定义  又称为堆栈,它是一种运算受限的线性表,其限制是仅允许在线性表的固定一端(表尾)进行插入、...向一个栈插入新元素称为进栈,压栈或入栈,它是把新元素放到当前栈顶元素的上面
  • C语言利用双向的操作实现两个栈共享段空间并且分别存放奇偶数 题目均在sdibt acm oj上AC,参考《深入浅出数据结构和算法》教材,逐个复制即可运行,欢迎评论指正! Description 两个栈共享段存储空间,1...
  • 的实现

    千次阅读 2019-12-19 22:16:05
    文章目录的定义的抽象数据类型定义的顺序实现顺序的基本操作顺序的初始化判断顺序是否为空求顺序的长度清空顺序销毁顺序顺序的入栈顺序的出栈的链式实现 本篇将讲述的相关知识 在之前的...
  • )——的基本操作

    千次阅读 2014-07-28 21:52:34
    1.的简介 是一种后入先出的数据结构,一般包含两种最基本的操作:入栈(push)和出栈(pop)。...2.有数据序列1 2 3一次存入一个栈stack中,则出栈顺序可以以下四种: 1,2,3; 2,1,3; 3,2,1; 1,3,
  • //两个顺序共享一个数据空间 #include&lt;stdio.h&gt; #include "stdlib.h" #define MAXSIZE 100 //是顺序所能存储的最多元素个数 typedef int datatype; typedef struct//顺序的定义  { ...
  • 详细介绍了的概念和性质,简要的介绍了ADT并附两种实现方式(链式、顺序),列举LeetCode第20题与严蔚敏老师和递归的讲解加深对的应用,供读者理解与学习,适合点赞+收藏。有什么错误希望大家直接指出~
  • 问题描述:对于N个元素(1到N)。...思路:由于只有一个栈,很容易得出S1到S2的操作序列是唯一的,因此可以用模拟法。遍历S2的每个元素。 for(遍历S2的每一个元素) {  if(当前元素还没有入栈)
  • C语言 类型的字符串怎么判断为空

    万次阅读 2018-05-26 23:49:09
    平时我们判断C语言类型的字符串是否为空,如下 char *p; ... if(p == "") ... 但是会提示警告:Result of comparison against a string literal is unspecified (use strncmp instead)。当时我...
  • * 操作目的 :判断一个字符序列是否回文 * 初始条件 :字符序列存在 * 操作结果 :若字符序列回文,返回true,否则返回false * 函数参数 : char *str 待判断的字符序列 *返回值 : bool型 *基本实现思想...
  • 本程序只是插入一个数据之后直接删除该数据。不够完善请原谅。 seqstack.h文件。 #include #include #define MAXSIZE 50 #define False 0; #define True 1; typedef struct{ int data...
  • 顺序栈即栈的顺序存储结构,它利用组地址连续的存储单元存放自栈底到栈顶的... 判断栈不存在的条件为S.base=NULL;  空栈:S.base=S.top;   满栈:S.top-S.base=S.stacksize;  #include "stdafx.h" #include
  • 一文读懂堆与的区别

    万次阅读 多人点赞 2018-06-29 15:24:05
    堆(Heap)与(Stack)是开发人员必须面对的两概念,在理解这两概念时,需要放到具体的场景下,因为不同场景下,堆与代表不同的含义。一般情况下,有两层含义: (1)程序内存布局场景下,堆与表示的是...
  • TCP快速重传触发条件一个细节

    千次阅读 2019-02-02 15:26:10
    前几日和前同事聊天聊到一个Linux内核协议实现中关于TCP快速重传触发条件一个细节,觉得比较有意思。 这个细节是这样的。 且看tcp_ack中,如果我们发现该ACK所携带的信息是 可疑的, 那么逻辑就会进入到进一步的...
  • 第三章 和队列 的实现

    千次阅读 多人点赞 2020-06-22 21:52:49
    第三章 和队列   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地址:亓官劼的博客 本文原创亓官劼,请大家支持原创,部分平台... 初始化一个空栈S
  • 数据结构——的详解

    万次阅读 多人点赞 2020-04-20 00:02:43
    和队列是两种重要的线性结构,从数据结构的角度看,和...C语言和C++中的C语言中的栈栈的定义C语言中的基本操作的初始化判断是否空栈判断是否入栈出栈C语言实现的具体代码C++中的C++中的基...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 76,435
精华内容 30,574
关键字:

判断一个栈s为空的条件是