栈的顺序存储和链式存储c语言实现
一. 栈
栈的定义:栈是只允许在一端进行插入或删除操作的线性表。
1.栈的顺序存储
栈顶指针:S.top,初始设为-1
栈顶元素:S.data[S.top]
进栈操作:栈不满时,栈顶指针先加1,再到栈顶元素
出栈操作:栈非空时,先取栈顶元素,再栈顶指针减1
栈空条件:S.top=-1
栈满条件:S.top=MaxSize-1
栈长:S.top+1
(1)结构
typedef struct{
ElemType data[MaxSize];
int top;//栈顶
}Stack;
(2)初始化空栈
Stack InitStack()
{
Stack S;
S.top=-;
return S;
}
(3)判断栈是否为空
int StackEmpty(Stack S)
{
if(S.top==-)
{
return TRUE;
}
else
{
return FALSE;
}
}
(4)进栈
int PushStack(Stack *p,ElemType x)
{
if(p->top==MaxSize-)
{
printf("栈满!\n");
return FALSE;
}
p->data[++p->top]=x;//指针先加1,再入栈
return TRUE;
}
(5)出栈
int PopStack(Stack *p,ElemType *x)
{
if(p->top==-)
{
printf("栈空!\n");
return FALSE;
}
*x=p->data[p->top--];//先出栈,指针再减1
return TRUE;
}
(6)读栈顶元素
ElemType GetTop(Stack S)
{
if(S.top==-)
{
printf("栈空!无法读取栈顶元素!\n");
}
else
{
return S.data[S.top];
} }
2.栈的链式存储
链栈便于多个栈共享存储空间和提高效率,规定所有操作都是再单链表的表头进行,没有用头结点,直接头指针指向栈顶元素。
(1)结构
struct NodeStack{
ElemType data;
struct NodeStack *next;
};
(2)初始化链栈
NodeStack* Init_NodeStack()
{
NodeStack *p;
p=(NodeStack*)malloc(sizeof(NodeStack));
p->next=NULL;
return p;
}
(3)判断链栈是否为空
int NodeStack_Empty(NodeStack *head)
{
if(!head->next)
{
return TRUE;
}
else
{
return FALSE;
}
}
(4)入栈
void Push_NodeStack(NodeStack *head)
{
NodeStack *p=(NodeStack*)malloc(sizeof(NodeStack));
ElemType x;
printf("输入入栈元素:");
scanf("%d",&x);
p->data=x;
p->next=head->next;
head->next=p;
}
(5)出栈
void Pop_NodeStack(NodeStack *head)
{
NodeStack *p=(NodeStack*)malloc(sizeof(NodeStack));
p=head->next;
head->next=p->next;
free(p);
}
(6)显示栈元素
void Print_NodeStack(NodeStack *head)
{
NodeStack *p=head;
printf("栈元素:");
while(p->next)
{
printf("%d ",p->next->data);
p=p->next;
}
printf("\n");
}
运行示例:
栈的顺序存储和链式存储c语言实现的更多相关文章
- 队列的顺序存储与链式存储c语言实现
一. 队列 1.队列定义:只允许在表的一端进行插入,表的另一端进行删除操作的线性表. 2.循环队列:把存储队列的顺序队列在逻辑上视为一个环. 循环队列状态: 初始时:Q.front=Q.rear=0 ...
- 线性表的顺序存储和链式存储c语言实现
一.线性表的顺序存储 typedef int ElemType;typedef struct List { ElemType *data;//动态分配 ,需要申请空间 int length; }Lis ...
- 数据结构导论 四 线性表的顺序存储VS链式存储
前几章已经介绍到了顺序存储.链式存储 顺序存储:初始化.插入.删除.定位 链式存储:初始化.插入.删除.定位 顺序存储:初始化 strudt student{ int ID://ID char nam ...
- 【Java】 大话数据结构(6) 栈的顺序与链式存储
本文根据<大话数据结构>一书,实现了Java版的栈的顺序存储结构.两栈共享空间.栈的链式存储机构. 栈:限定仅在表尾进行插入和删除操作的线性表. 栈的插入(进栈)和删除(出栈)操作如下图所 ...
- 算法与数据结构(一) 线性表的顺序存储与链式存储(Swift版)
温故而知新,在接下来的几篇博客中,将会系统的对数据结构的相关内容进行回顾并总结.数据结构乃编程的基础呢,还是要不时拿出来翻一翻回顾一下.当然数据结构相关博客中我们以Swift语言来实现.因为Swift ...
- 线性表的顺序存储和链式存储的实现(C)
//线性表的顺序存储 #include <stdio.h>typedef int DataType;#define MaxSize 15//定义顺序表typedef struct { Da ...
- C 数据结构1——线性表分析(顺序存储、链式存储)
之前是由于学校工作室招新,跟着大伙工作室招新训练营学习数据结构,那个时候,纯碎是小白(至少比现在白很多)那个时候,学习数据结构,真的是一脸茫然,虽然写出来了,但真的不知道在干嘛.调试过程中,各种bug ...
- 线性表的链式存储C语言版
#include <stdio.h> #include <malloc.h> #define N 10 typedef struct Node { int data; stru ...
- 线性表的链式存储——C语言实现
SeqList.h #ifndef _WBM_LIST_H_ #define _WBM_LIST_H_ typedef void List; typedef void ListNode; //创建并且 ...
随机推荐
- Java实现第八届蓝桥杯国赛 数字划分
标题:数字划分 w星球的长老交给小明一个任务: 1,2,3-16 这16个数字分为两组. 要求: 这两组数字的和相同, 并且,两组数字的平方和也相同, 并且,两组数字的立方和也相同. 请你利用计算机的 ...
- Java实现 蓝桥杯 算法提高VIP 摆花 dp 记忆搜索 2种做法 多重背包
题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号.为了在门口展出更多种花,规定第i种花不能超过ai盆,摆花时 ...
- Java实现 LeetCode 649 Dota2 参议院(暴力大法)
649. Dota2 参议院 Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇) Dota2 参议院由来自两派的参议员组成.现在参议院希望对一个 Dota2 游戏里的改变作出决 ...
- Java实现 LeetCode 611 有效三角形的个数(双指针)
611. 有效三角形的个数 给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数. 示例 1: 输入: [2,2,3,4] 输出: 3 解释: 有效的组合是: 2,3,4 ( ...
- Java实现 蓝桥杯VIP 算法训练 会议中心
算法训练 会议中心 时间限制:2.0s 内存限制:512.0MB 会议中心 Siruseri政府建造了一座新的会议中心.许多公司对租借会议中心的会堂很感兴趣,他们希望能够在里面举行会议. 对于一个客户 ...
- Java实现 LeetCode 79 单词搜索
79. 单词搜索 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格. ...
- Liunx常用运维命令整理记录
前言 作为后端开发者,掌握一些常用的运维命令也是很有必要的,本文记录常用Liunx运维命令 基本命令 目录切换 cd base-admin/ 切换到当前目录下的base-admin目录 cd .. 切 ...
- 关于linux免密登录及ssh客户端的使用
操作系统环境: CentOS Linux release 7.7.1908 (Core) 1.首先在linux服务器上,使用ssh-keygen命令生成密钥对文件(一直回车即可,默认使用rsa算法), ...
- tensorflow2.0学习笔记第二章第一节
2.1预备知识 # 条件判断tf.where(条件语句,真返回A,假返回B) import tensorflow as tf a = tf.constant([1,2,3,1,1]) b = tf.c ...
- iOS-UIViewController创建的几种方法和UIWindow的介绍
在上一篇笔记中<iOS-程序启动原理和UIApplication>,http://blog.csdn.net/yang198907/article/details/49735531 在程序 ...