数据结构--线性表--栈的顺序存储和链式存储代码实现(c语言实现)

栈–C语言代码实现

1.线性表:

首先了解一下线性表的一些基础知识。
概念: n个数据元素的有序序列。

结构特点

  1. 存在唯一的一个被称为”第一个“的数据元素。

  2. 存在唯一的一个被称为”最后一个“的数据元素。

  3. 除第一个元素外,集合中的每个元素都只有一个前驱。

  4. 除最后一个元素外,集合中的每个元素都只有一个后继。

    顺序表示

    ​ 用一组地址连续的存储单元依次存储线性表中的数据元素。

    ​ 线性表的这种机内表示称为线性表的顺序存储或顺序印象,这种存储结构的线性表为顺序表。

    ​ 通常用数组来描述顺序存储结构。

    ​ 结构特点是逻辑关系上相邻的两个元素在物理位置上也相邻。

    结构定义

    #define LIST_INIT_SIZE 100 //线性表存储表空间的初始分配量
    #define LISTINCREMENT 10	//线性表存储空间的分配增量
    typedef stuct
    {
         
        ElemType *elem;	//存储空间基址
        int length;		//当前长度
        int listSize;	//当前分配的存储容量
    }
    

    链式表示和实现

    ​ 用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的。)

    ​ 称作线性链表或者单链表

    ​ 这种存储结构为非顺序映像或者链式映像。

    typedef struc LNode
    {
         
        Elmtype data;
        struct LNode *next;
    }LinkList;
    

    ​ 循环列表:

    ​ 尾结点的指针指向头结点,整个列表形成一个环。

    ​ 循环条件为 指针是否指向了头指针。

    双向链表:

    typedef struct DuLNode
    {
         
        ElemTYpe data;
        struct DuLNode *prior;
        struct DuLNode *next;
    }DuLinkList
    

了解了一些基础知识后我们接下来进行栈的基本了解和实现

2.栈

概念:限定仅在表位进行插入或删除操作的线性表。对于栈来说,表尾端成为栈顶,表头端成为栈底

特点:栈的修改是按照后进先出的原则进行的,因此又称为**后进先出(last in first out)**的线性表(简称LIFO结构)。
在这里插入图片描述

2.1 栈的顺序存储

顺序栈:利用一组地址连续的存储单元一次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。

代码实现:

/*
* 栈是一种线性表的数据结构   LIFO 后进先出
* 栈的顺序实现
*/
#include<stdbool.h>
#include <stdlib.h>
#define INIT_STACK_SIZE 100  //栈初始化深度
#define INCREMENT_SIZE	10	//每次动态申请栈大小


typedef int ElemType ;
typedef struct STACK
{
   
	ElemType* base;    //指向栈底元素
	ElemType* top;		//指向栈顶元素
	int stacksize;		//栈的深度
}Stack;

/*
* 初始化栈
*/
bool InitStack(Stack * sp);

/*
* 清空栈
*/
bool clearStack(Stack* sp);
/*
* 插入元素到栈中
*/
bool push(Stack* sp, ElemType e);
/*
* 将栈顶元素弹出,删除栈顶元素,并用e返回值
*/
bool pop(Stack* sp, ElemType * e);
/*
* 返回栈顶元素,只返回不删除
*/
bool getTop(Stack * sp,ElemType e);
/*
* 将函数作用于每个元素上
*/
bool StackTraverse(Stack* sp, void(*pFun)(ElemType e));

/*
* 每个元素加一
*/
void element_add(ElemType e);
/*
* 具体实现部分
*/
bool InitStack(Stack* sp)
{
   
	ElemType* base = (
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值