数据结构-栈(stack)

数据结构(Stack)的实现详解 是一种线性数据结构,其插入新元素和删除现有元素都发生在堆的顶部。Stack)按照"后进先出"(Last-In-First-Out,LIFO)的原则存储和访问数据。类似于现实生活中的堆叠物体,比如一摞书或者一堆盘子。 阅读详情

一、概述

栈是数据结构中最常用的一种算法,核心是LIFO(Last In First Out),即后进先出,出栈和入栈只会对栈顶进行操作,栈底永远为0。

二、操作

三、代码

头文件 stack.h

#ifndef _STACK_H_
#define _STACK_H_
/**
栈的核心是LIFO(Last In First Out),即后进先出
出栈和入栈只会对栈顶进行操作,栈底永远为0
通过单链表形式实现栈的功能 
**/
#define SUCCESS		0
#define FAIL	   -1
//栈的数据结构
typedef struct StackNode *pStackNode;
typedef int DataType;//栈中的数据类型 
 
typedef struct StackNode{
	DataType *data;
	pStackNode next; 
}sStackNode;

typedef struct Stack{
	sStackNode *top;
	int dataNum;
}sStack;

void InitStack();
int Push(const DataType data);
int Pop(DataType *data);
void Clear();
int Size();
void Print();
#endif

实现文件 stack.c

#include "stack.h"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

static sStack gStack;

static int DataCmp(DataType newData,const DataType oldData){
	return SUCCESS;
}

static void DataCopy(DataType *newData,const DataType *oldData){
	memcpy(newData,oldData,sizeof(DataType));
}

void InitStack(){
	gStack.top = NULL;
	gStack.dataNum = 0;
}

int Push(const DataType data){
	pStackNode node = (pStackNode)malloc(sizeof(sStackNode));
	node->data = (DataType *)malloc(sizeof(DataType));
	DataCopy(node->data,&data);
	node->next = gStack.top;
	gStack.top = node;
	gStack.dataNum++;
}

int Pop(DataType *data){
	if(NULL == data || 0 == gStack.dataNum)
	{
		return FAIL;
	}
	
	pStackNode node = gStack.top;
	gStack.top = node->next;
	DataCopy(data,node->data);
	free(node->data);
	free(node);
	gStack.dataNum--;
}

void Clear(){
	pStackNode node = NULL;
	 
	while(gStack.top)
	{
		node =  gStack.top;
		gStack.top = gStack.top->next;
		free(node->data);
		free(node);		
	}
	
	InitStack();
}

int Size(){
	return gStack.dataNum;
}

void Print(){
	pStackNode node = gStack.top;
	printf("static size:%d\n",gStack.dataNum);
	while(node)
	{
		printf("%d ",*node->data);
		node = node->next;	
	}
	
	printf("\n");
}

 

数据结构与Java中的Stack、Deque 1.的定义 2.类型、结构及其特点 3.顺序的基本功能实现 4.链式的基本功能实现 Stack 1.Stack介绍 2.Stack部分源码分析 3.为什么说Stack是不优良的设计 Deque 1.使用Deque代替Stack 2.ArrayDeque部分源码分析 3.再谈LinkedList 总结 ... 阅读详情

相关推荐

StackNode

StackNode

Stack

头文件 stack.h #ifndef __STACK_H__ #define __STACK_H__ #include&amp;amp;lt;iostream&amp;amp;gt; #include&amp;amp;lt;assert.h&amp;amp;gt; using namespace std; #define ElemType int #define STACK_INIT_SIZE 8 typedef struct Stack { ...

linzetao233的博客 342

采用顺序存储实现的初始化、入、出操作

nt main(int argc, char *argv[]) { int e; SqStack l1; Linkst l2; Queue l3; LinkQueue l4; cout<<"请输入数列的个数"<>le; cout<<"请输入数字选择您要的线性存储结构:"<<endl<<"0、顺序结构,1、链式结构,2.顺序队列,3、链式队列" <>a; cout<<"请输入数列"<<endl; switch(a) { case 0:InitStack(l1); for(int i=0;i>e;Push(l1,e);} while(le--){Pop(l1,e);cout<<e<<" ";} break; case 1:Initlink(l2); for(int i=0;i>e;push(l2,e);} while(le--){pop(l2,e);cout<<e<<" ";} break; case 2:InitQueue(l3); for(int i=0;i>e;Push1(l3,e);} while(le--){Pop1(l3,e);cout<<e<<" ";} break; case 3:InitQue(l4); for(int i=0;i>e;push1(l4,e);} while(le--){pop1(l4,e);cout<<e<<" ";} break; } system("PAUSE"); return 0; }

数据结构C语言实现——和队列

本文记录了自己学习数据结构算法课程的及队列实现代码 部分 stack.h #ifndef STACK_H_ #define STACK_H_ #include<stdio.h> #include<stdlib.h> #include<stdbool.h> #include<math.h> #include<string.h> #define MAXSIZE 100 typedef int StackType; //顺序结构// type

qq_42642142的博客 773

--顺序/链式

--顺序/链式

Yeaii_yyii的博客 153

C语言:链的基本操作

文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 利用链表对的将实现基本操作: 入 打印 代码 #include<stdio.h> #include<stdlib.h> #include<malloc.h> #define SIZE sizeof(StackNode) typedef struct StackNode { int data; struct LNode *n...

Aqu-蓝空的博客 778

【JavaSE与数据结构Stack

本篇文章带大家认识Java集合——StackStack就是的意思,是一种数据结构,又叫先进后出表,本文首先会介绍数据结构》,了解清楚的特点与性质,然后会根据的性质简单来模拟以及集合框架Stack类常见方法的使用。 Tips:数据结构——链表,在博主的历史文章中介绍过并通过Java和C语言都实现模拟过,所以对链表不再多赘述,集合框架中LinkedList类底层就是使用双链表实现的,因此在Java中可以使用LinkedList对象来使用链表,如果对链表不了解,可以去博主数据结构算法专栏了解。

未见花闻的博客 1737

浅谈Stack数据结构

一、概述: stack):是一种线性的结构,这种数据结构仅限在线程表的一段进行插入和删除操作。其中线性表插入的和删除的一段称为顶(top),不循序插入和删除的一段称为底(bottom)。所以数据结构是遵循“后入先出”,也就是“LIFO”。 二、的特征 (1)也是一种线性的机构。 (2)相比较数组,占对应的操作是数组的子集。 (3)只能从一端添加元素,也只能从一端取出元素,这一端称为顶。 (4)是一种后进先出的数据结构。称为:Liast In First Out(LIFO)

bc_Reversing的博客 1864

数据结构stack

目录 特点: 使用数组来模拟 思路: 代码实现: 应用: Java中的-Stack类源码解读 特点: 先入后出(FILO) 是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端为变化的一端,成为顶(Top),另一端为固定的一端,成为底(Bottom) 最先放入中的为底,最后放入的元素在顶;而删除元素刚好相反,最后放入的元素最...

千千 434

【JAVA数据结构Stack的深度剖析

JAVA的深度剖析,这瓜保熟💕

爱打酱油的新一的博客 880

数据结构(Stack)

本文旨在讲解Java的(Stack)以及其主要方法。

L2770789195的博客 1093

Java数据结构——Stack)详解

本文详细介绍了Java中的(Stack)数据结构,包括其基本概念、常用方法、手动实现和典型应用场景。是一种后进先出(LIFO)的受限线性表,Java提供了Stack类及其基本操作。文章演示了如何用数组手动实现,并重点讲解了在递归转非递归、括号匹配、逆波兰表达式求值和最小设计等场景的应用。通过LeetCode经典题目示例,展示了在实际编程中的使用方法和注意事项。

MuL__的博客 1015

数据结构-stack

是一种遵循后进先出原则的线性数据结构。核心操作包括入、出和查看顶元素,时间复杂度均为O(1)可通过顺序表或链表实现,各有利弊:顺序表访问效率高但扩容成本大,链表动态扩容但内存开销大。典型应用场景包括函数调用、表达式求值、浏览器后退功能和文本撤销操作等,在计算机系统中有广泛应用。

lmprove_lp的博客 1107

C++数据结构之:Stack

it人员无论是使用哪种高级语言开发东东,想要更高效有层次的开发程序的话都躲不开三件套:数据结构算法和设计模式。数据结构是相互之间存在一种或多种特定关系的数据元素的集合,即带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系,分为逻辑结构和存储结构。此系列专注讲解数据结构数组、链表、队列、、树、哈希表、图,通过介绍概念以及提及一些可能适用的场景,并以C++代码简易实现,多方面认识数据结构,最后为避免重复造轮子会浅提对应的STL容器。本文介绍的是Stack

weixin_45068267的博客 1741

数据结构四】Stack详解

一种特殊的线性表,其。进行数据插入和删除操作的一端称为顶,另一端称为底。中的数据元素遵守后进先出LIFO)的原则。压的插入操作叫做进,。出的删除操作叫做出。。特点是:后进先出。如图所示。

2203_75565612的博客 1205

蓝桥杯备考:数据结构stack

如果是左括号,我们入,如果是右括号,我们进行匹配,匹配成功出,匹配如果不成功那我们就返回false,最后我们还要查看一下是不是空,如果不是空,还是false。第二点就是,我们每组数据是隔离的,互不影响的,所以我们要处理脏数据,再每次处理完一组数据之后,要清空我们的。除了我们的静态的,我们stl库里面还有一个现成的,叫stack,它的创建和vector实际上是差不多的。int的数据范围是-2的31次方到2的31次方-1。我们入是0,1,2,3,4,5,6,7,8,9。我们来测试一下stack

2301_81772249的博客 754

Python数据结构实战—(Stack)

文章目录1.的性质(后进先出)2.使用deque作为3.使用双端队列实现Stack类 1.的性质(后进先出) s = [] #定义一个空数组装元素 s.append('https://www.cnn.com/') #尾部添加 s.append('https://www.cnn.com/world') s.append('https://www.cnn.com/india'...

weixin_37763870的博客 1286

数据结构七、stack

数据结构——算法竞赛)

seanmooPercy的博客 302
上一篇: wampserver配置问题造成红色或黄色解决方案
下一篇: 数据结构-队列(queue)
七擒关羽
博客等级 码龄15年 49粉丝 13原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值