精华内容
下载资源
问答
  • 在处理数组上面真的很方便,这是的基础方法函数//顺序实现stack。cpp#include "stack。h"Status SqStack::InitStack(SqStack **S){ (*S)=(SqStack *) malloc(sizeof(SqStack)); (*S)->base=(SElemType *)...

    栈在处理数组上面真的很方便,这是栈的基础方法函数//顺序栈的实现stack。cpp#include "stack。

    h"Status SqStack::InitStack(SqStack **S){ (*S)=(SqStack *) malloc(sizeof(SqStack)); (*S)->base=(SElemType *)malloc(STACKSIZE *sizeof(SElemType)); if(!(*S)->base) exit(OVERFLOW); (*S)->top=(*S)->base; (*S)->stacksize=0; return 1;}Status SqStack::DestroyStack(){free(base);return 1;}Status SqStack::ClearStack(){stacksize=0;return 1;}bool SqStack::StackEmpty(){ if(stacksize==0) return true; else return false;}int SqStack::StackLength(){ return stacksize;}SElemType SqStack::GetTop(){ if(top==base) {cerr<

    全部

    展开全文
  • 学习完《算法与数据结构》第三版第3章后进行代码实现 基于数组是十分简单的,数组是横向存储的而是竖向的所以只需要我们将数组改成竖向就行了 让我们来看一下代码吧! #include <stdio.h> #include &...

    学习完《算法与数据结构》第三版第3章栈后进行代码实现
    基于数组的栈是十分简单的,数组是横向存储的而栈是竖向的所以只需要我们将数组改成竖向就行了
    让我们来看一下代码吧!

    #include <stdio.h>
    #include <stdlib.h>
    
    #define max 100
    
    typedef struct stack
    {
    	int arr[max];//数组建立顺序栈
    	int top;//栈中元素个数
    }stack;
    
    //顺序栈初始化
    void init(stack* s)
    {
    	s->top = 0;//栈中个数初始化为0
    }
    
    //判断栈空
    int empty(stack* s)
    {
    	if (s->top > 0)
    	{
    		printf("栈中有元素");
    		return 0;
    	}
    	else
    	{
    		printf("这是一个空栈");
    		return 1;
    	}
    }
    
    //进栈
    void push(stack* s)
    {
    	if (s->top == max)
    	{
    		printf("栈满无法进栈");
    	}
    	else
    	{
    		int x;
    		printf("请输入要进栈的元素:");
    		scanf_s("%d",&x);
    		s->arr[s->top++] = x;//栈(数组)中的个数增加1
    	}
    }
    
    //出栈
    int pop(stack* s) 
    {
    	if (s->top == 0)
    	{
    		printf("栈空无法出栈");
    		return 0;
    	}
    	else 
    	{
    		s->top--;
    		return s->arr[s->top];
    	}
    }
    
    //求栈深==栈中元素的个数
    int deep(stack* s)
    { 
    	//printf("栈中元素个数是:");
    	return s->top;
    }
    
    //读取栈顶元素
    int top(stack* s)
    {
    	if (s->top == 0)
    	{
    		printf("栈空");
    	}
    	else
    	{
    		printf("栈顶元素为:");
    		return(s->arr[s->top - 1]);
    	}
    }
    
    //打印栈中的元素
    void printstack(stack* s)
    {
    	if (s->top == 0)
    	{
    		printf("栈空无法打印");
    	}
    	else
    	{
    		printf("栈中元素为:\n");
    		for (int i = 0; i < s->top; i++)
    		{
    			printf("%d\n", s->arr[i]);
    		}
    	}
    }
    
    //销毁栈
    void destory(stack* s)
    {
    	free(s);//直接释放空间
    }
    
    //清空栈==初始化
    void clear(stack* s)
    {
    	s->top = 0;
    }
    
    //主函数
    void main()
    {
    	stack* s;
    	s = (stack*)malloc(sizeof(stack));
    	init(s);
    	int temp;
    	while (1)
    	{
    		printf("****************************顺序栈(基于数组)****************************\n");
    		printf("**********************************1.进栈**********************************\n");
    		printf("**********************************2.出栈**********************************\n");
    		printf("**********************************3.判断栈空******************************\n");
    		printf("**********************************4.求栈深********************************\n");
    		printf("**********************************5.读取栈顶元素**************************\n");
    		printf("**********************************6.打印栈********************************\n");
    		printf("**********************************7.清空栈********************************\n");
    		printf("**********************************8.销毁栈********************************\n");
    		printf("**********************************9.退出exit******************************\n");
    		printf("**************************************************************************\n");
    		printf("--------------------------------------------------------制作于2021年5月1日\n");
    		printf("输入你要进行的操作:");
    		scanf_s("%d",&temp);
    		if (temp == 9)
    		{
    			printf("程序退出");
    			break;
    		}
    		switch (temp)
    		{
    			case 1:
    			{
    				int num;
    				printf("请输入你要进栈的元素个数:");
    				scanf_s("%d",&num);
    				for (int i = 0; i < num; i++)
    				{
    					push(s);
    				}
    				printf("栈中元素个数是:%d\n", deep(s));
    				printstack(s);
    				printf("\n");
    			}break;
    			case 2:
    			{
    				int emnum;//用于接受empty函数的返回值
    				int deepnum = deep(s);//接受deep函数返回值
    				int choose;
    				emnum = empty(s);
    				printf("\n");
    				if (emnum == 0)
    				{
    					printf("栈中元素个数是:%d\n", deep(s)); 
    					printstack(s);
    					printf("请选择:  1.单次出栈   2.多次出栈  \n");
    					scanf_s("%d", &choose);
    					if (choose == 1)
    					{
    						pop(s);
    						printstack(s);
    					}
    					else 
    					{
    						int n;
    						printf("输入你要出栈几个元素:");
    						scanf_s("%d",&n);
    						if (n > deepnum)
    						{
    							printf("出栈个数大于栈内元素个数请重新选择");
    							break;
    						}
    						else
    						{
    							for (int i = 0; i < n; i++)
    							{
    								pop(s);
    							}
    							printstack(s);
    						}
    					}
    				}
    				else 
    				{
    					break;
    				}
    			}
    			break;
    			case 3:
    				empty(s);
    				printf("\n");
    				break;
    			case 4:
    				printf("栈中元素个数是:%d\n", deep(s));
    				break;
    			case 5:
    				printf("%d\n", top(s));
    				break;
    			case 6:
    				printstack(s);
    				break;
    			case 7:
    				clear(s);
    				empty(s);
    				printf("\n");
    				break;
    			case 8:
    				destory(s);
    				break;
    			default:
    				printf("error 请重新输入\n");
    				break;
    		}
    	}
    }
    

    程序是可以完美实现的
    调试结果:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • #include #define MaxSize 100//定义栈typedef ...//数组实现栈内元素定位int top;//作为数组下标int buttom;} stack;//创建一个空栈stack * CreateStack(){stack * st = (stack*)malloc(sizeof(stack));if(st =...

    #include #define MaxSize 100

    //定义栈

    typedef struct stack

    {

    char data[MaxSize];//数组实现栈内元素定位

    int top;//作为数组下标

    int buttom;

    } stack;

    //创建一个空栈

    stack * CreateStack()

    {

    stack * st = (stack*)malloc(sizeof(stack));

    if(st == NULL)

    return ;//分配空间失败

    st->top = st->buttom = 0;

    return st;

    }

    //入栈

    void Push(stack * st, char data)

    {

    st->data[st->top]= data;

    st->top++;

    }

    //出栈

    void Pop(stack * st, char data)

    {

    int n = st->top;

    while(n != st->buttom)//判断是否是空栈

    {

    if(st->data[n-1] == data)

    {

    st->top = n-1;

    break;

    }

    n--;

    }

    }

    //打印栈元素

    void Display(stack * st)

    {

    int n = st->top;

    while(n != st->buttom)

    {

    printf("%c ",st->data[n-1]);

    n--;

    }

    printf("\n");

    }

    int main()

    {

    int i=5,j=5;

    stack * st;

    st = CreateStack();

    printf("开始进栈:\n");

    while(i--)

    {

    Push(st,'A'+i);

    printf("%c入栈后,栈内元素为: ",'A'+i);

    Display(st);

    }

    printf("开始出栈:\n");

    while(j--)

    {

    Pop(st,'E'-j);

    printf("%c出栈后,栈内元素为: ",'E'-j);

    Display(st);

    }

    return 0;

    }

    展开全文
  • while (top_element>0) { printf("元素%d=%d\n", top_element,top()); stack[top_element--]; } top_element = n;//top_element = top_element +n; return stack[top_element]; } int main() { int n,m; int i=...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    #include

    #include

    #include

    #include

    #define STACK_TYPE int

    #define STACK_SIZE 100

    #if 1

    int top_element = 0;

    STACK_TYPE stack[STACK_SIZE];

    void push(STACK_TYPE value);

    void pop(void);

    STACK_TYPE top();

    STACK_TYPE EEE();

    STACK_TYPE is_full();

    STACK_TYPE show_stack();

    void push(STACK_TYPE value)

    {

    assert(!is_full());

    top_element += 1;

    stack[top_element]=value;

    }

    void pop(void)

    {

    assert(!EEE());

    printf("pop()函数调用栈顶的值=%d\n", stack[top_element]);

    top_element -= 1;

    }

    STACK_TYPE top()

    {

    assert(!EEE());

    return stack[top_element];

    }

    STACK_TYPE EEE()

    {

    return top_element ==0;

    }

    STACK_TYPE is_full()

    {

    return top_element ==STACK_SIZE;

    }

    STACK_TYPE show_stack()

    {

    assert(!EEE());

    int n = top_element;

    while (top_element>0)

    {

    printf("栈元素%d=%d\n", top_element,top());

    stack[top_element--];

    }

    top_element = n;//top_element = top_element +n;

    return stack[top_element];

    }

    int main()

    {

    int n,m;

    int i=100;

    while (1)

    {

    printf("1.输入栈顶元素\n");

    printf("2.删除栈顶元素\n");

    printf("3.显示栈顶元素\n");

    printf("4.显示所有栈元素\n");

    printf("5.退出程序\n");

    //scanf("%d", &n);

    scanf("%d", &m);

    switch (m)

    {

    case 1:

    {

    scanf("%d", &n);

    int*p = (int*)malloc(sizeof(int)*n);

    *p = n;

    push(*p);

    }

    break;

    case 2:

    pop();

    getchar();

    break;

    case 3:

    printf("栈顶元素的值=%d\n",top());

    getchar();

    break;

    case 4:

    show_stack();

    getchar();

    break;

    case 5:

    exit(0);

    break;

    }

    getchar();

    //getchar();

    system("cls");

    }

    //push(95);

    //push(102);

    //pop();

    //printf("pop()函数调用后栈顶的值=%d\n", top());

    getchar();

    return 0;

    }

    展开全文
  • **我看到别人的顺序都是别的方式来写的,我现在这里的是一维数组,也就是用数组模拟。由于要用到bool型,所以我直接c++来写,大家可以相应改成C语言的版本,并不难。**顺序的操作 无非是基本的...
  • 以下是完整代码:/**thisfileifanimplementationofstackwitharraylist*filename:ArrayStack.c*author:JohnWoods*date:2015/5/10*statement:anyonecanusethisfileforanypurpose*/#include#includ...
  • #include<stdio.h> #include<stdlib.h> //快速注释多行:Ctrl +K 然后 Ctrl + C #include<string.h> ...typedef struct mystack //写一个不可能单独处理一种类型的数据 { ...
  • 线性(通过数组实现) ** 模型** C代码实现 ** 代码注释非常详细,可直接编译运行** // // Created by wen on 2021/9/20. // #define MAX_SIZE 1024 #include "stdio.h" #include "stdlib.h" #include "string....
  • 变长数组C语言实现

    2021-05-28 10:13:22
    在结构体末尾定义char data[0]实现变长数组 struct MyData{ int nLen; char data[0]; }; 在结构体中,data是一个数组名,但该数组没有元素,不占结构体空间(sizeof(struct MyData) = 4),该数组的地址紧随...
  • //该程序仅一个数组实现两个的例程。//除非数组的每一个单元都被使用//否则你的例程不能有溢出声明#include #include #define MinStackSize (5)typedef struct Node *dbstack; //双栈dbstack CreatStack(int...
  • 用C语言实现顺序数组)顺序的基本操作和实现顺序的定义基本知识预处理和头文件定义的基本框架顺序的初始化入栈出栈获取栈顶元素测试代码 顺序的基本操作和实现 在大学的数据结构与算法课程中,大部分...
  • 逆向学习之C语言栈实现: 先把栈的C语言实现代码写出来,后续分析内存 总体而言,写栈步骤&思路: *创建结构体变量: 1.初始化栈空间:利用malloc函数动态申请空间,分别 ...//C语言数组实现栈 .
  • 源程序: #include <stdio.h> #define MAXSIZE 50 typedef struct { int data[MAXSIZE]; int top; }Sqstack; int Push(Sqstack *S, int x) //进栈 ... printf("已满!\n"); printf("\n"); return 0;
  • 本文实例讲述了C语言用栈和队列实现的回文功能。分享给大家供大家参考,具体如下:#include#include//内存分配头文件#include//在math.h中已定义OVERFLOW的值为3#define SIZE 100#define STACKINCREMENT 10#define ...
  • 1 作业讲解指针间接操作的三个必要条件两个变量 其中一个是指针建立关联:一个指针指向另一个地址*简述sizeof和strlen的区别strlen求字符串长度,字符数组到’\0’就结束sizeof是看数据类型占用大小(字节何为野指针...
  • 实现(数组)-C语言

    2021-12-15 15:06:33
    实现(数组) 一种特殊的线性表,其只允许在固定的一端...实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优化一些。因为数组在尾上插入数据的代价比较小。 #include <stdio.h> #include &l
  • 堆栈可以使用 “静态数组”、“动态分配的数组”、“动态分配的链式结构” 来实现。本文使用的方案是动态分配的数组。 动态数组的优点:长度可以在运行时候才确定以及可以更改原来数组的长度,较为灵活。 缺点:
  • 两个队列实现栈 //前提已知 typedef struct queue { int queuesize; int head, tail; int *q; }Queue; void InitQueue(Queue *q); void EnQueue(Queue *q, int key); int DeQueue(Queue *q);int SizeOfQueue...
  • 一个数组实现两个

    2021-05-23 09:57:05
    题目:一个数组A[1..n]来实现两个,使得两个中的元素总和不到n时,两个都不会发生上溯。思路(1):创建一个数组,分别从两边开始,依次往中间走。思路(2):创建一个数组,一个走奇数位,一个走偶数位。//奇偶方式...
  • 静态数组实现1.堆栈接口// 一个堆栈模块接口// 命名为stack.h#define STACK_YTPE int // 堆栈所存储值的类型// push函数// 把一个新值压入栈中void push(STACK_YTPE value);// pop函数// 从堆栈中弹出一个值STACK_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 55,467
精华内容 22,186
关键字:

用数组实现栈c语言

c语言 订阅