《大话数据结构》栈——仅限定在表尾进行插入和删除操作的线性表。

本文主要是介绍《大话数据结构》栈——仅限定在表尾进行插入和删除操作的线性表。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.定义解读

栈是一个线性表,具有前后驱关系。

在线性表的表尾进行插入和删除操作,这里的表尾指的是栈顶。

2.栈的顺序表结构

#define MAXSIZE 1000
tyoedef struct
{int data[MAXSIZE];int top;//栈顶
}stack;

注意:

1)进栈操作

/*插入元素e为新的栈顶元素 */#define MAXMIZE 100typedef struct 
{int data[MAXMIZE];int top;
}stack;int push(stack *s,int e)
{s->top++;s->data[s->top]=e;if(s->top==MAXSIZE-1)return 0;return 1;
}

2)出栈操作

/*若栈不空,则删除 S的栈顶元素,用 e 返回其值,并返回 OK , 否则返回 BRROR */#define MAXMIZE 100
typedef struct
{int data[MAXMIZE];int top;
}stack;int pop(stack *s,int *e)
{*e=s->data[s->top];s->top--;if(s->top==-1)return 0;return 1;}

上述的两个均为涉及到任何循环语句,因此时间复杂度是O(1)

 

3.两栈共享空间

前提是:两个具有相同数据类型的栈

对于一个数组而言,他有两个端点,就可以当作是两个栈底,让其中一个栈底为数组的始端,即下标为0处,让另一个栈为栈的末端,即下标为数组长度的n-1处。

形成的操作是:当两个栈增加元素,就会向中间延申

 

如何判断栈满?

//栈共享空间
#define MAXSIZE 100
typedef struct
{int data[MAXSIZE];int top1;//栈顶指针int top2;//栈底指针
}dulstack;//两栈共享空间的push方法,除了要有插入元素的参数外,还需要判断是哪个栈stacknumint push(dulstack *s,int e,int stacknum)
{//这个要首先判断是否栈满,就不用担心溢出的问题了if(s->top1+1==s->top2)return 0;//栈1有元素进栈if(stacknum==1)s->top1++;s->data[s->top1]=e;//s->data[++s->top1]=e;//栈2有元素进栈else if(stacknum==2)s->top2--;s->data[s->top2]=e;//s->data[--s->top2]=e;return 1;
}/*若栈不空,则删除S的栈顶元素,用e返回其值,并返回1,否则返回0*/
int pop(dulstack *s,int *e,int stacknum)
{if(stacknum==1){//栈1是空栈if(s->top1==-1)return 0;s->top1--;*e=s->data[s->top1];        }else if(stacknum==2){    //栈2是空栈if(s->top2==-1)return 0;s->top2++;*e=s->data[s->top2];}return 1;}

4.栈的链式存储结构

栈顶放在单链表的头部,对于栈链来说,是不需要头节点的。

对于空栈来说,链表的头指针是指向为空,那么栈链的空,其实就是top=NULL

//链栈的结构typedef struct node
{int data;struct node *next;
}node,*nodeptr;typedef struct stack
{nodeptr top;int count;
}stack;

1)进栈操作

插入数据域为e的新节点s,top为栈顶指针

tpyedef struct node
{int data;struct node *next;
}node,*nodeptr;typedef struct stack
{nodeptr top;int count;
}stack;/*插入元素 e 为新的栈顶元素*/
int push(stack *s,int e)
{nodeptr L=(nodeptr)malloc(sizeof(node));//开启了一个新nodeL->data=e;L->next=s->top;s->top=L;//新节点L赋值给栈顶指针s->count++;return 1;
}

2)出栈

将p用来作为存储要删除的栈顶节点,将栈顶指针下移一位,最后释放p

typedef struct node
{int data;struct node *next;
}node,*nodeptrtypedef struct stack
{nodeptr top;int count;
}stack;/* 若栈不空,则删除s的栈顶元素,并用e返回其值,并返回1,否则返回0*/int pop(stack *s,int *e)
{nodeptr p;//定义了一个新节点*e=s->top->data;p=s->top;//将栈顶节点的值赋值给怕,(3)s->top=s->top->next;//将栈顶指针下移一位的关键操作free(p);s->count--;if(S->next==NULL)return 0;return 1;}

 

顺序栈链栈什么时候用?

 

栈的作用:

 

 

 

 

 

 

 

 

这篇关于《大话数据结构》栈——仅限定在表尾进行插入和删除操作的线性表。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1041645

相关文章

Linux使用cut进行文本提取的操作方法

《Linux使用cut进行文本提取的操作方法》Linux中的cut命令是一个命令行实用程序,用于从文件或标准输入中提取文本行的部分,本文给大家介绍了Linux使用cut进行文本提取的操作方法,文中有详... 目录简介基础语法常用选项范围选择示例用法-f:字段选择-d:分隔符-c:字符选择-b:字节选择--c

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要