精华内容
下载资源
问答
  • 用不带头结点的单链表存储链栈,设计初始化栈、判断栈是否为空进栈和出栈等相应的算法 二、问题分析 不带头结点的单链表lst为空的条件是lst=NULL,进栈和出栈操作都是在表头进行的 三、问题解答 void initStack...

    一、问题描述

    用不带头结点的单链表存储链栈,设计初始化栈、判断栈是否为空、进栈和出栈等相应的算法

    二、问题分析

    不带头结点的单链表lst为空的条件是lst=NULL,进栈和出栈操作都是在表头进行的

    三、问题解答

    void initStack(LNode *&lst){//初始化栈 
    	lst=NULL;
    }
    int isEmptyl(LNode *lst){//判断栈是否为空 
    	if(lst==NULL) return 1;
    	else return 0;
    }
    void pushl(LNode *&lst,int x){//进栈 
    	LNode *p;
    	p=(LNode *)malloc(sizeof(LNode));
    	p->next=NULL;
    	p->data=x;
    	p->next=lst;
    	lst=p; 
    }
    int popl(LNode *&lst,int &x){//元素出栈 
    	LNode *p;
    	if(lst==NULL)return 0;//栈空的情况 
    	p=lst;
    	x=p->data;
    	lst=p->next;
    	free(p);
    	return 1;
    }
    
    展开全文
  • 栈:进栈,出栈,取栈顶元素,判断栈是否为空,置空栈,输出元素个数等 注:用switch进行选择操作。 //栈:进栈,出栈,取栈顶元素,判断栈是否为空,置空栈,输出元素个数等。 #include"stdio.h" #define maxsize 100...

    栈:进栈,出栈,取栈顶元素,判断栈是否为空,置空栈,输出元素个数等

    注:用switch进行选择操作。

    //栈:进栈,出栈,取栈顶元素,判断栈是否为空,置空栈,输出元素个数等。
    #include"stdio.h"
    #define maxsize 100
    typedef struct
    {
    	int datas[maxsize];
    	int top;
    }link;
    
    void menu(void)
    {
    	printf("\n///");
    	printf("\n    1  判栈空              2  进栈    ");
    	printf("\n    3  出栈                4  取栈顶元素   ");
    	printf("\n    5  栈置空              6  求当前元素个数    ");
    	printf("\n    7  显示栈中元素        8  退出");
    	printf("\n///");
    }
    
    void initialize(link *a)//初始化函数
    {
    	a->top=0;
    }
    
    int judge(link *a)//判断栈是否为空
    {
    	if(a->top==0)
    		return 0;
    	else
    		return 1;
    }
    
    int enter(link *a,int x)//进栈
    {
    	if(a->top==maxsize-1)
    	{
    		printf("此栈已满\n");
    		return 0;
    	}
    	else
    	{
    		a->top++;
    		(a->datas)[a->top]=x;
    		return 1;
    	}
    }
    
    int out(link *a,int x)//出栈,栈的特点是*后进先出*,出栈的是最后一个元素
    {
    	if(judge(a)==0)
    	{
    		printf("此栈为空\n");
    		return 0;
    	}
    	else
    	{
    		x=(a->datas)[a->top];
    		a->top--;
    		return 1;
    	}
    }
    
    int gettop(link *a,int x)//取栈顶元素
    {
    	if(judge(a)==0)
    	{
    		printf("此栈为空\n");
    		return 0;
    	}
    	else
    	{
    		x=(a->datas)[a->top];
    		return 1;
    	}
    }
    
    int number(link *a)//输出元素个数
    {
    	return a->top;
    }
    
    void clear(link *a)
    {
    	a->top=0;//置空栈
    }
    
    void shuchu(link *a)//输出
    {
    	int i;
    	if(judge(a)==0)
    		printf("此栈为空\n");
    	else
    	{
    		for(i=1;i<=a->top;i++)
    			printf("%5d",a->datas[i]);
    	}
    }
    
    void main()
    {
    	link a;
    	char yn;
    	int i,x;
    	menu();
    	initialize(&a);//初始化
    	printf("\n请输入一个序号(1~8)\n");
    	scanf("%d",&i);	
    	while(i!=8)
    	{
    		switch(i)
    		{
    			case 1:
    				if(judge(&a)==0)
    					printf("此栈为空");
    				else
    					printf("此栈不为空");
    				break;
    			case 2:
    				printf("请输入要进栈的元素:\t");
    				scanf("%d",&x);
    				if(enter(&a,x)==1)
    					printf("进栈成功");
    				else
    					printf("进栈失败");
    				break;
    			case 3:
    				if(out(&a,x)==1)
    				   printf("出栈成功");
    				else
    					printf("出栈失败");
    				break;
    			case 4:
    				if(judge(&a)==1)
    					printf("栈顶元素为:%d",x);
    				else
    					printf("出栈失败");
    				break;
    			case 5:
    				printf("如果要置空当前元素的话,请输入Y或y,若不想就随意输入\n");
    				getchar();
    				scanf("%c",&yn);
    				if(yn=='Y'||yn=='y')//注意字符加单引号
    				{
    					clear(&a);
    					printf("栈已置空");
    				}
    				break;
    			case 6:
    				printf("栈中元素个数为:%d",number(&a));
    				break;
    			case 7:
    				printf("栈中元素为:");
    					shuchu(&a);
    				break;
    				default:printf("操作有误\n");
    		}
    		printf("\n请输入一个序号(1~8)\n");
    		scanf("%d",&i);
    	}
    }
    

    运行结果如下:
    运行成功

    展开全文
  • 试编写双栈初始化,判断栈空、栈满、进栈和出栈等算法的函数。 #include<iostream> using namespace std; typedef struct { int top[2], bot[2]; int *V; int m; }DblStack; void ShowM

    将编号为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;
    		}
    		}
    	}
    }
    

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

    展开全文
  • :是一种思想,实现将数据以先进后出(FILO:first in last out)方式操作 一、模型:井口 二、数据类型: //宏: #define MAXSIZE 10 //重命名:将int取一个别名:StackType typedef int StackType; //...

    栈:是一种思想,实现将数据以先进后出(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");
    }

     

    展开全文
  • 链栈:运算是受限的单链表,的链式存储结果,只能在链表头部(栈顶)进行操作,所以没有必要附加头结点,栈顶指针就是头指针 是一种后进先出的线性表LIFO结构 空栈:不含任何元素的称为空栈 代码区 #include<...
  • 记录一下今天学的代码 , 关于c++顺序 // sqstack.cpp : 顺序初始化和输出打印 // #include "stdafx.h" #include "iostream" #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef char ElemType;...
  • 编写程序,实现顺序的创建、进栈和出栈等基本操作算法。 (1) 创建包含任意个元素的顺序。 (2) 进栈一个任意元素。 (3) 出栈一个任意元素。 (4) 取栈顶元素并输出。 *(5) 删除中值给定值的元素。 ...
  • int IsEmpty(char stack[],int *top) //判断是否为空栈 { if(*top==-1) return 1; //空栈返回1 else return 0; //非空栈返回0 } 编译提示红色部分出错,error C2664: 'IsEmpty' : cannot convert ...
  • #include&amp;amp;lt;stdio.h&amp;amp;gt; #define max 100 .../*初始化*/ Stack *init_stack() { Stack *stack; stack=(Stack*)malloc(sizeof(Stack)); stack-&amp;amp;g...
  • :先进后出,后进先出 用泛型是按顺序结构 *SeqStack<>:<>叫做泛型参数列表,里面可以定义名字,实际上是一个类型占位符, *你可以理解成,它代表用户指定的一个类型 class SeqStack<T>{ // ...
  • 顺序,遵循先进后出后进先出原则。我在写的时候,宏定义的 firstsize 为创建一个时这个的初始大小,这里为100。...栈是否为空,print函数用来出栈。 //以下为全部代码 #include "stdio.h" #include "mall...
  • 的判判满运算:判断一个还是满; } 正在学c语言数据结构的同学最好不要照搬,通过注释自己摸索写出属于自己的代码才是最重要的。 话不多说,直接上代码: #include<stdio.h> #define stack_size 10...
  • 常见数据结构的Python实现-目录 1.1 基本概念1.2 的实现1.3 应用(括号匹配)1.4 应用(中缀转后缀-整数)1.5 应用( 中缀转后缀-浮点数) 1) 拆分表达式 2) 中缀转后缀1.6 应用(计算中缀表达式) 1) 计算后缀...
  • 顺序的基本操作实现---入栈、出栈、判断是否为空 本身就比较简单,的基本概念推荐文章:http://blog.csdn.net/hguisu/article/details/7674195 实现代码如下: stack.h 的头文件: #pragma once #...
  • 判断出入的顺序序列是否合法(向函数传递一维数组)向函数传递数组问题判断出入的顺序序列是否合法代码实现 向函数传递数组问题 在c语言中,不带任何下标的数组名代表数组的首地址(pushAndPopIsValid(char sq[]...
  • 顺序进栈出栈

    千次阅读 2019-10-20 13:57:05
    注意 :我在这里尝试了多种操作,实际使用时应该适当删除一些代码 #define _CRT_SECURE_NO_WARNINGS 1 #include"stdio.h" #include “windows.h” #define MAXSIZE 20 ...//定义的框架 typedef ...
  • 顺序进栈、出栈算法

    千次阅读 2020-06-09 20:26:26
    #include<stdio.h> #define m 100 typedef struct { int stack[m];...int emptys(int top) //判断是否为空 { return top==-1; //判断top是否等于-1,top==-1 -> return 1 || top!=-1 -&g.
  • 顺序函数源码 #include <stdio.h> #include <stdbool.h> #include <stdlib.h>...功能:顺序栈函数的使用 ...在顺序中:我们主要讨论顺序的 初始化,栈空满,入栈,出栈,遍历
  • 将编号0和1的两个栈存放于一个数组空间V[m]中,栈底分别...试编写双栈初始化,判断栈空、栈满、进栈和出栈等算法的函数。双栈数据结构的定义如下: typedef struct{ int top [ 2],bot [ 2];//栈顶和栈底指针 SE...
  • 给定进栈顺序,判断一个序列是否为正确的出栈顺序
  • #include #include typedef struct Node { ... clear()清空 if(pop(&S, &val)) //val用于保存出栈的数值 printf("ok\n"); else printf("error\n"); traverse(&S); return 0; }  
  • 定义的数据结构,请在该类型中实现一个能够得到的最小元素的 min 函数在该中,调用 min、push 及 pop 的时间复杂度都是 O(1)。 示例: MinStack minStack = new MinStack(); minStack.push(-2); minStack.push...
  • //函数的声明 #pragma once typedef int DataType; typedef struct Stack{ DataType* array; int capacity; int size; }Stack; //的初始化 void StackInit(Stack* ps); //入栈 void StackPush(Stack* ps, ...
  • 代码段: #include<stdio.h> #include<stdlib.h>...#define ElemType int//把int命名ElemType typedef struct { ElemType data[MaxSize];//存放元素 int top; //栈顶指针 }SqSt
  • 将编号0和1的两个栈存放于一个数组...试编写双栈初始化,判断栈空、栈满、进栈和出栈等算法的函数。 注意 左栈是通常意义的栈,右栈的入栈操作(栈顶指针减1),出栈操作(栈顶指针加1) #include <stdio.h>...
  • Code /*顺序表实现的一系列操作*/ #include<stdio.h> #include<stdlib.h>...#define Stack_Size 50 //设中元素个数50 #define OK 1 #define ERROR 0 typedef struct ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,744
精华内容 4,297
关键字:

判断栈是否为空的进栈函数