//(1)数组
#include <stdio.h>
#include <stdlib.h>
/*堆疊資料結構*/
struct Stack
{
int Array[10];//陣列空間
int Top;//堆疊頂端指標
};
/*檢查堆疊是否為空*/
bool stack_empty(Stack *Stack1)
{
if(Stack1->Top==0)
{
return true;
}
else
{
return false;
}
}
/*推入資料*/
void push(Stack *Stack1,int x)
{
Stack1->Top=Stack1->Top+1;
Stack1->Array[Stack1->Top]=x;
}
/*彈出資料*/
int pop(Stack *Stack1)
{
if(stack_empty(Stack1))
{
printf("underflow");
}
else
{
Stack1->Top=Stack1->Top-1;
return Stack1->Array[Stack1->Top+1];
}
}
int main()
{
struct Stack *Stack1=(struct Stack *)malloc(sizeof(struct Stack));//宣告資料結構空間
Stack1->Top=0;//初始化
push(Stack1,3);//推入3
push(Stack1,4);//推入4
push(Stack1,1);//推入1
push(Stack1,10);//推入10
printf("%d ",pop(Stack1));//彈出10
printf("%d ",pop(Stack1));//彈出1
printf("%d ",pop(Stack1));//彈出4
system("pause");
}
//(2)链表
/*链栈的结构定义*/
typedef struct {
SLink top; // 栈顶指针
int length; // 栈中元素个数
}Stack;
void InitStack ( Stack &S )
{
// 构造一个空栈 S
S.top = NULL; // 设栈顶指针的初值为"空"
S.length = 0; // 空栈中元素个数为0
} // InitStack
/*能否将链栈中的指针方向反过来,从栈底到栈顶?
不行,如果反过来的话,删除栈顶元素时,为修改其前驱指针,需要从栈底一直找到栈顶。*/
void Push ( Stack &S, ElemType e )
{
// 在栈顶之上插入元素 e 为新的栈顶元素
p = new LNode; // 建新的结点
if(!p) exit(1); // 存储分配失败
p -> data = e;
p -> next = S.top; // 链接到原来的栈顶
S.top = p; // 移动栈顶指针
++S.length; // 栈的长度增1
} // Push
/*在链栈的类型定义中设立"栈中元素个数"的成员是为了便于求得栈的长度。*/
bool Pop ( Stack &S, SElemType &e )
{
// 若栈不空,则删除S的栈顶元素,用 e 返回其值,
// 并返回 TRUE;否则返回 FALSE
if ( !S.top )
return FALSE;
else
{
e = S.top -> data; // 返回栈顶元素
q = S.top;
S.top = S.top -> next; // 修改栈顶指针
--S.length; // 栈的长度减1
delete q; // 释放被删除的结点空间
return TRUE;
}
} // Pop
来自维基百科
分享到:
相关推荐
有些语言不提供指针与对象数据类型,以下代码通过多重数组实现链表结构及其基本操作。 用一个数组空间模拟分配堆。用一个头指针为free的链表来管理自由空间。用栈得push和pop操作来实现释放和分配空间。 三个数组...
入栈(Push)和出栈(Pop)是栈(Stack)数据结构的两个基本操作。栈是一种后进先出(Last In, First Out,LIFO)的数据结构,类比于把一堆物体放在一起,后放入的物体先被取出。 下面是入栈和出栈的基本操作: 1....
入栈和出栈的基本操作 入栈和出栈是栈(Stack)这种数据结构的核心操作,它们共同维护着栈的后进先出(LIFO)特性。下面,我们将对入栈和出栈操作进行更详细的介绍。 入栈(Push) 入栈操作是将一个新元素添加到...
栈的基本操作有:pop,push,判断空,获取栈顶元素,求栈大小 2.构造栈 可以使用数组构造栈,也可以使用单向链表构造,我觉得使用单向链表更加灵活方便,下面的例子我使用单向链表来构造栈。 单向链表的头插...
链表操作 q2_两数相加 q19_删除链表的倒数第N个节点 q25_k个一组翻转链表 q61_旋转链表 q138_复制带随机指针的链表 q160_相交链表 q206_反转链表 双指针遍历/滑动窗口 q3_无重复字符的最长子串 q11_盛最多水的容器 ...
栈的基本操作: 栈的基本操作: ⾯试中关于栈的常见问题: ⾯试中关于栈的常见问题: Push——在顶部插⼊⼀个元素 Pop——返回并移除栈顶元素 isEmpty——如果栈为空,则返回 trueTop——返回顶部元素,但并不移除...
本文实例为大家分享了C语言利用模板实现简单的栈类(数组和单链表),供大家参考,具体内容如下 主要的功能是实现一个后进先出的列表,有入栈、出栈、返回大小、判空等基本功能 #pragma once using namespace std;...
(1)顺序表和链表的存储与基本操作; (2)循环链表;双向链表; 3.栈和队列 (1)栈和队列的定义; (2)栈和队列的顺序和链式存储; (3)栈和队列的应用; 4.字符串 (1)字符串的定义、存储和操作; (2)...
数据类型:如整数、浮点数、字符串、列表、元组、字典等,以及它们的基本操作。 控制结构:如条件语句(if-elif-else)、循环语句(for、while)等。 函数定义与调用:如何定义函数,以及如何使用参数和返回值。 二...
基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和空间复杂度。 算法: 算法设计:研究如何将解决问题的步骤形式化为一系列指令,...
C语言实现的数据结构代码,主要有顺序表、链表、栈、队列、数组、串、树、图的定义、创建、基本操作、应用等 代码通俗易懂,逻辑清晰,注释 规范,适合借鉴代码,完成实验报告,研究数据结构等。
2019/11/11 20:30 1,917 数组.cpp 2019/09/28 16:28 1,879 无头结点链表.cpp 2019/12/16 20:10 1,955 查找表.cpp 2019/11/25 21:17 2,442 树.cpp 2019/09/10 21:44 641 立方体.cpp 2019/10/24 18:28 3,455 算术...
Java提供了丰富的数据结构,包括数组、链表、栈、队列、树、图等。掌握这些数据结构的特点、优缺点以及适用场景,对于编写高质量的代码至关重要。例如,当需要快速插入和删除操作时,链表比数组更加高效;当需要快速随机...
数据结构实验报告及全套代码:实验一熟悉环境 实验二 顺序表的基本操作 实验三 单链表 实验四 双向链表 实验五 栈的操作 实验六 队列 实验七 串的操作 实验八数组操作 实验九二叉树的遍历 实验十 二叉树的应用 实验...
顺序存储的栈的基本操作如下: 判断栈满: int stackfull(seqstack *s) { return (s->top= =stacksize-1); } 进栈: void push(seqstack *s,datatype x) { if (stackfull(s)) error(“stack verflow”); s->data...
程序的输入是数组,通过二叉树的数组表示创建的链表表示的二叉树,输出没有做成树型输出,感觉太复杂,而是按照广义表的输出方式输出 写的时候感觉大部分的操作实现都很简单,不过非递归方式的后序和中序的游标遍历搞的...
一个数组可以分解为多个数组元素,这些数组元素可以是基本 数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数 组、指针数组、结构数组等各种类别。 栈 (Stack) 是只能在某一端插入和...
11.2.2 二叉树的基本操作 11.2.3 二叉树的顺序存储 11.2.4 二叉树的二叉链表存储 11.2.5 二叉树的三叉链表存储 11.3 遍历二叉树 11.3.1 先序遍历 11.3.2 中序遍历 11.3.3 后序遍历 11.3.4 广度优先(按层)...
1.4.18 二叉树的三叉链表存储的基本操作 201 范例1-72 二叉树的三叉链表存储表示 201 ∷相关函数:CreateBiTree函数 1.4.19 二叉树的二叉线索存储的基本操作 212 范例1-73 二叉树的二叉线索存储 212 ∷相关函数:...