一. 栈

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

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. (Java实现) 图的m着色问题

    图的m着色问题 [问题描述] 给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的.图的m着色问 ...

  2. System.getProperty("user.dir")获取的到底是什么路径?

    一直用System.getProperty("user.dir")来获取文件目录,我在执行单个方法调试和执行测试脚本的时候碰到一个问题, 我写了一个类ElementInitiali ...

  3. Python之Flask框架二

    今天接着上一篇继续写一篇关于flask的随笔. 本文大纲: 1.获取请求参数 2.一个函数处理多个请求方式 3.重定向 4.错误响应 5.全局错误处理 6.返回json格式数据 7.自定义返回内容状态 ...

  4. (四)SQLMap之Tamper篡改脚本的类型、作用、适用场景

    目录结构 一.SQLMap中tamper的简介 1.tamper的作用 2.tamper用法 二.适配不同数据库类型的测试tamper 三.SQLMap中tamper篡改脚本的功能解释 一.SQLMa ...

  5. keras搭建神经网络快速入门笔记

    之前学习了tensorflow2.0的小伙伴可能会遇到一些问题,就是在读论文中的代码和一些实战项目往往使用keras+tensorflow1.0搭建, 所以本次和大家一起分享keras如何搭建神经网络 ...

  6. 括号匹配-算法详细题解LeetCode

    题目:有效的括号 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. ...

  7. test tt=0 <=>test(0)

    class test{ int mvalue; public: test(int i){ cout << "test(int i) =" << i < ...

  8. 了解JSON Web令牌(JWT)

    JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案. (一) 跨域身份验证 Internet服务无法与用户身份验证分开. 用户向服务器发送用户名和密码. 验证服务器后,相关数据( ...

  9. (七)MySQL常见的数据类型、约束和标识列

    一.MySQL常见数据类型 1.数值型: ①整型:tinyint.smllint.mediumint.int/integer.bigint 图源:尚硅谷李玉婷 案例1:关键表格teacher,分别添加 ...

  10. 在Centos7中,从主机 Windows 上无法远程访问 Linux 上rabbitmq的解决方法

    当在 Linux 上配置好 Rabbitmq服务器后,如果从主机中无法访问到 Linux 中的Rabbitmq服务器时,需要做如下的检查: 1. Rabbitmq是否启动成功 在控制台输入: ps - ...