堆栈顺序链式存储的定义与操作

  1. typedef struct SNode *PtrToSNode;
  2. struct SNode {
  3. ElementType Data;
  4. PtrToSNode Next;
  5. };
  6. typedef PtrToSNode Stack;
  7. Stack CreateStack( )
  8. { /* 构建一个堆栈的头结点,返回该结点指针 */
  9. Stack S;
  10. S = (Stack)malloc(sizeof(struct SNode));
  11. S->Next = NULL;
  12. return S;
  13. }
  14. bool IsEmpty ( Stack S )
  15. { /* 判断堆栈S是否为空,若是返回true;否则返回false */
  16. return ( S->Next == NULL );
  17. }
  18. bool Push( Stack S, ElementType X )
  19. { /* 将元素X压入堆栈S */
  20. PtrToSNode TmpCell;
  21. TmpCell = (PtrToSNode)malloc(sizeof(struct SNode));
  22. TmpCell->Data = X;
  23. TmpCell->Next = S->Next;
  24. S->Next = TmpCell;
  25. return true;
  26. }
  27. ElementType Pop( Stack S )
  28. { /* 删除并返回堆栈S的栈顶元素 */
  29. PtrToSNode FirstCell;
  30. ElementType TopElem;
  31. if( IsEmpty(S) ) {
  32. printf("堆栈空");
  33. return ERROR;
  34. }
  35. else {
  36. FirstCell = S->Next;
  37. TopElem = FirstCell->Data;
  38. S->Next = FirstCell->Next;
  39. free(FirstCell);
  40. return TopElem;
  41. }
  42. }

原文地址:https://www.cnblogs.com/lzdxh027/p/11305714.html

时间: 2024-11-24 21:42:45

堆栈顺序链式存储的定义与操作的相关文章

数据结构与算 5:C++ 顺序/链式存储,栈 模板类实现,编译模板类问题解决

[本文谢绝转载原文来自http://990487026.blog.51cto.com] 数据结构与算 5:C++ 顺序/链式存储,栈 模板类实现 C++ 顺序存储模板类的实现[面试重要] C++ 链式存储模板类的实现[面试重要] C++ 链式存储模板类,载入指针 c++ 栈的链式存储实现(模板类嵌套模板类),编译问题教训[重要] C++ 顺序存储模板类的实现[面试重要] 项目文件: [email protected]://990487026.blog.51cto.com~/c++$ tree .

数据结构-队列-顺序链式存储

定义 队列(Queue):队列简称队,也是一种操作受限的线性表,只允许在表的一端进行插入,而在表的另一端进行删除.向队列中插入元素称为入队或进队:删除元素称为出队或离队. 队列的操作 队列不可以读取对中间的元素. 队列的存储结构 顺序存储 链式存储 顺序存储 队列的顺序实现是指分配一块连续的存储单元存放队列中的元素,并附设两个指针front 和rear分别指示队头元素和队尾元素的位置. 设队头指针指向队头元素,队尾指针指向队尾 元素的下一个位置(也可以让rear指向队尾元素,front指向队头元

数据结构学习之堆栈(链式存储)

[摘要]链表存储结构的内存地址不一定是连续的,但顺序存储结构的内存地址一定是连续的:链式存储适用于在较频繁地插入.删除.更新元素时,而顺序存储结构适用于频繁查询时使用.所以本文主要基于前文的基础,讨论链式存储结构的堆栈. 1.链式存储(不连续内存) /*链式结构*/ typedef struct _STACK_NODE { int pData; struct _STACK_NODE *next; }STACK_NODE,*LinkStackPtr; typedef struct LinkStac

线性表的链式存储结构及相关操作

#include<cstdio> #include<cstdlib> #include<cstring> #include<ctime> typedef struct node{ int data; struct node *next; }node; typedef struct node *LinkList; int GetElem(LinkList L,int i,int *e){ //获取元素 int j; LinkList p; p = L->

数据结构之线性表(链式存储结构)

线性表的实现分顺序存储结构和链式存储结构 上一节我们主要介绍了顺序存储结构,在最后我们还分别总结了顺序存储结构的优缺点, 对于顺序结构的缺点,我们有没有什么好的解决方法呢? 我们今天要介绍的线性表的链式存储结构就可以很好的解决顺序结构的缺点,一起来看. 顺序结构最大的缺点就是在进行插入和删除操作的时候,如果插入位置不理想,那么我们需要移动大量的元素,那产生这一问题的原因是什么呢? 仔细分析后,我们可以发现在顺序存储结构中,他们相邻的元素的存储位置也是相邻的,我们在申请内存的的时候,是一次性申请一

数据结构开发(5):线性表的链式存储结构

0.目录 1.线性表的链式存储结构 2.单链表的具体实现 3.顺序表和单链表的对比分析 4.小结 1.线性表的链式存储结构 顺序存储结构线性表的最大问题是: 插入和删除需要移动大量的元素!如何解决? 链式存储的定义: 为了表示每个数据元素与其直接后继元素之间的逻辑关系:数据元素除了存储本身的信息外,还需要存储其直接后继的信息. 链式存储逻辑结构: 基于链式存储结构的线性表中,每个结点都包含数据域和指针域 数据域:存储数据元素本身 指针域:存储相邻结点的地址 专业术语的统一: 顺序表 基于顺序存储

数据结构--线性表的链式存储结构

一 线性表的链式存储结构 A.链式存储的定义为了表示每个数据元素与直接后继元素之间的逻辑关系:数据元素除了存储本身的信息外,还需要存储其直接后继的信息图示B链式存储逻辑结构基于链式存储结构的线性表中,每个结点都包含数据域和指针域1.数据域:存储数据元素本身2.指针域:存储相邻结点的地址图示C链表中的基本概念1.头结点--链表中的辅助结点,包含指向第一个数据元素的指针(方便插入和删除)2.数据结点--链表中代表数据元素的结点,表现形式为:(数据元素,地址)3.尾节点--链表中的最后一个数据结点,包

线性表的链式存储——线性表的链式存储结构

1,基于顺序存储结构插入或删除元素时候会涉及大量元素移动,非常影响效率,本文着手解决这个问题: 2,链式存储结构为了弥补顺序存储结构效率上的问题: 3,链式存储的定义: 1,为了表示每个数据元素与其后继元素之间的逻辑关系,数据元素除了存储本身的信息外,还需要存储其直接后继的信息: 2,幼儿园排队:每个小朋友记住他前面的小朋友是谁,这样可以轻易的排队: 4,一定要分清 p->next 是左值还是右值,左值时表示节点内存储的位置,右值时表示节点对象: 5,链式存储逻辑结构: 1,基于链式存储结构的线

数据结构(四)——基于链式存储结构的线性表

数据结构(四)--基于链式存储结构的线性表 一.基于链式存储结构的线性表 1.链式存储的定义 链式存储为了表示数据元素与其直接后继元素间的逻辑关系,数据元素除了存储本身的信息外,还需要存储直接后继的信息.相连的数据元素之间在存储空间中不要求连续.链式存储的逻辑结构基于链式存储结构的线性表中,每个结点都包含数据域和指针域.数据域用于存储数据元素本身,指针域用于存储相邻结点的地址. 2.链表的定义 链表是基于链式存储结构的线性表链表的基本元素:头结点:链表中的辅助结点,包含指向第一个数据元素的指针数