一. 栈

栈的定义:栈是只允许在一端进行插入或删除操作的线性表。

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语言实现的更多相关文章

  1. 队列的顺序存储与链式存储c语言实现

    一. 队列 1.队列定义:只允许在表的一端进行插入,表的另一端进行删除操作的线性表. 2.循环队列:把存储队列的顺序队列在逻辑上视为一个环. 循环队列状态: 初始时:Q.front=Q.rear=0 ...

  2. 线性表的顺序存储和链式存储c语言实现

    一.线性表的顺序存储 typedef int ElemType;typedef struct List { ElemType *data;//动态分配 ,需要申请空间 int length; }Lis ...

  3. 数据结构导论 四 线性表的顺序存储VS链式存储

    前几章已经介绍到了顺序存储.链式存储 顺序存储:初始化.插入.删除.定位 链式存储:初始化.插入.删除.定位 顺序存储:初始化 strudt student{ int ID://ID char nam ...

  4. 【Java】 大话数据结构(6) 栈的顺序与链式存储

    本文根据<大话数据结构>一书,实现了Java版的栈的顺序存储结构.两栈共享空间.栈的链式存储机构. 栈:限定仅在表尾进行插入和删除操作的线性表. 栈的插入(进栈)和删除(出栈)操作如下图所 ...

  5. 算法与数据结构(一) 线性表的顺序存储与链式存储(Swift版)

    温故而知新,在接下来的几篇博客中,将会系统的对数据结构的相关内容进行回顾并总结.数据结构乃编程的基础呢,还是要不时拿出来翻一翻回顾一下.当然数据结构相关博客中我们以Swift语言来实现.因为Swift ...

  6. 线性表的顺序存储和链式存储的实现(C)

    //线性表的顺序存储 #include <stdio.h>typedef int DataType;#define MaxSize 15//定义顺序表typedef struct { Da ...

  7. C 数据结构1——线性表分析(顺序存储、链式存储)

    之前是由于学校工作室招新,跟着大伙工作室招新训练营学习数据结构,那个时候,纯碎是小白(至少比现在白很多)那个时候,学习数据结构,真的是一脸茫然,虽然写出来了,但真的不知道在干嘛.调试过程中,各种bug ...

  8. 线性表的链式存储C语言版

    #include <stdio.h> #include <malloc.h> #define N 10 typedef struct Node { int data; stru ...

  9. 线性表的链式存储——C语言实现

    SeqList.h #ifndef _WBM_LIST_H_ #define _WBM_LIST_H_ typedef void List; typedef void ListNode; //创建并且 ...

随机推荐

  1. 通过Android studio手动触发Android 上层GC(垃圾回收)的方法

    1.打开android Studio, 2.菜单栏中点击"View"--"Tools Window"--"Profiler",可以看到对应的 ...

  2. Java实现 LeetCode 795 区间子数组个数 (暴力分析)

    795. 区间子数组个数 给定一个元素都是正整数的数组A ,正整数 L 以及 R (L <= R). 求连续.非空且其中最大元素满足大于等于L 小于等于R的子数组个数. 例如 : 输入: A = ...

  3. Java实现 LeetCode 695 岛屿的最大面积(DFS)

    695. 岛屿的最大面积 给定一个包含了一些 0 和 1 的非空二维数组 grid . 一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相 ...

  4. Java实现 LeetCode 672 灯泡开关 Ⅱ(数学思路问题)

    672. 灯泡开关 Ⅱ 现有一个房间,墙上挂有 n 只已经打开的灯泡和 4 个按钮.在进行了 m 次未知操作后,你需要返回这 n 只灯泡可能有多少种不同的状态. 假设这 n 只灯泡被编号为 [1, 2 ...

  5. Java实现十六进制转十进制

    基础练习 十六进制转十进制 时间限制:1.0s 内存限制:512.0MB 提交此题 锦囊1 锦囊2 问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出. 注:十六进 ...

  6. Java实现 LeetCode 435 无重叠区间

    435. 无重叠区间 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触& ...

  7. JavaScript如何调用Python后端服务

    本篇文章旨在通过一段JavaScript来演示如何调用python后端服务的,这是我开发的一个构建测试数据的工具. 第一部分:html 代码部分 第二部分:JavaScript代码部分 第三部分:Py ...

  8. PAT 1038 Recover the Smallest Number (30分) string巧排序

    题目 Given a collection of number segments, you are supposed to recover the smallest number from them. ...

  9. mysql域名解析引起的远程访问过慢?

    MYSQL远程连接速度慢的解决方法 PHP远程连接MYSQL速度慢,有时远程连接到MYSQL用时4-20秒不等,本地连接MYSQL正常,出现这种问题的主要原因是, 默认安装的MYSQL开启了DNS的反 ...

  10. 如何在微信小程序中使用阿里字体图标

    第一步:下载需要的字体图标 进入阿里图标官网http://iconfont.cn/搜索自己想要的图标. 如这里需要一个购物车的图标,流程为: 搜索“购物车”图标 --->  点击“添加入库”  ...