1、数据结构-栈的实现-C语言

#define MAXSIZE 100

//栈的存储结构
typedef struct
{
    int* base;   //栈底指针
    int* top;    //栈顶指针
    int stacksize;     //最大容量
} SqStack;

//栈初始化---1
void InitStack(SqStack* S);
//栈的销毁---2
void DestroyStack(SqStack* S);
//栈的清空---3
void ClearStack(SqStack* S);
//判断栈是否为空---4
void StackEmpty(SqStack S);
//栈的长度---5
int StackLength(SqStack S);
//取栈顶元素---6
void GetTop(SqStack S);
//入栈操作---7
void Push(SqStack* S, int value);
//出栈操作---8
void Pop(SqStack* S,int* value);
//依次访问栈元素---9
void StackTraverse(SqStack S);
void ShowHelp();

//-----------------------------------------------

void ShowHelp()
{
    printf("1---初始化栈\n");
    printf("2---销毁栈\n");
    printf("3---清空栈\n");
    printf("4---判断栈是否为空\n");
    printf("5---栈的长度\n");
    printf("6---取栈顶元素\n");
    printf("7---入栈操作\n");
    printf("8---出栈操作\n");
    printf("9---依次访问栈元素\n");
}

void InitStack(SqStack* S)
{
    S->base = (SqStack*) malloc(MAXSIZE*sizeof(SqStack));
    if(!S->base)
    {
        printf("分配失败.\n");
        return;
    }
    S->top = S->base;            //初始时候相等
    S->stacksize = MAXSIZE;     //设置最大容量
}

void DestroyStack(SqStack* S)
{
    free(S->base);  //释放基地址
    S->top = NULL;
    S->base = NULL;

}

void ClearStack(SqStack* S)
{
    S->top = S->base;
}

void StackEmpty(SqStack S)
{
    if(S.top == S.base)
        printf("此栈为空栈。\n");
    else
        printf("此栈不为空栈。\n");
}

int StackLength(SqStack S)
{
    return S.top - S.base;
}

void GetTop(SqStack S)
{
    if(S.top == S.base)
    {
        printf("此栈为空。\n");
        return;
    }
    printf("此栈顶元素为%d。\n",*(S.top-1));
}

void Push(SqStack* S, int value)
{
    if(S->top-S->base == MAXSIZE)
    {
        printf("栈中元素已满,不能再继续添加.\n");
        return;
    }
    *(S->top) = value;
    S->top++;
    printf("-入栈成功\n");
}

void Pop(SqStack* S,int* value)
{
    if(S->top == S->base)
    {
        printf("栈中无元素,不能再进行出栈操作.\n");
        return;
    }
    *value = *((S->top)-1);
    S->top--;
    printf("出栈成功\n");
}

void StackTraverse(SqStack S)
{
    if(S.base == S.top){
        printf("此栈为空。\n");
        return;
    }
    int* start = S.base;
    int num = 1;
    while(start != S.top)
    {
        printf("元素%d的值为:%d\n",num,*start);
        num++;
        start++;
    }
}

C语言数据结构-栈的实现-初始化、销毁、长度、取栈顶元素、查找、入栈、出栈、显示操作的更多相关文章

  1. C语言数据结构-链式队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作

    1.数据结构-链式队列的实现-C语言 typedef struct QNode { int data; struct QNode *next; }QNode,*QueuePtr; typedef st ...

  2. C语言数据结构-循环队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作

    1.数据结构-循环队列的实现-C语言 #define MAXSIZE 100 //循环队列的存储结构 typedef struct { int* base; //基地址 int _front; //头 ...

  3. C语言数据结构-队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作

    1.数据结构-队列的实现-C语言 //队列的存储结构 #define MAXSIZE 100 typedef struct { int* base; //基地址 int _front; //头指针 i ...

  4. C语言数据结构-链式栈的实现-初始化、销毁、长度、取栈顶元素、查找、入栈、出栈、显示操作

    1.数据结构-链式栈的实现-C语言 //链式栈的链式结构 typedef struct StackNode { int data; struct StackNode *next; } StackNod ...

  5. 【转】【数据结构】【有n个元素依次进栈,则出栈序列有多少种】

    卡特兰数 大神解释:https://blog.csdn.net/akenseren/article/details/82149145      权侵删 原题 有一个容量足够大的栈,n个元素以一定的顺序 ...

  6. 剑指Offer20 栈的压入弹出序列是否正确

    /************************************************************************* > File Name: 20_IsPopO ...

  7. C语言数据结构——第三章 栈和队列

    三.栈和队列 栈和队列是两种重要的线性结构.从数据结构的角度来看,栈和队列也是线性表,它的特殊性在于栈和队列的基本操作是线性表操作的子集,它们的操作相对于线性表来说是受到限制的,因此,可以称其为限定性 ...

  8. php 栈、 出栈、入栈

    最近在面试的时候被问到栈,回来做个总结,希望对大家有帮助 栈是线性表的一种,他的特点是后入先出,可以这么理解,栈就像一个存东西的盒子,先放进去的在最底层,后放进去的在上层,因为上层的东西把底层的东西压 ...

  9. 【NOJ2024】入栈序列和出栈序列

    入栈序列和出栈序列 时间限制(普通/Java):1000MS/3000MS         运行内存限制:65536KByte 总提交:293          测试通过:68 比赛描述 给出入栈序列 ...

  10. n个元素进栈,共有多少种出栈顺序?

    1.基于栈的问题分析 我们把n个元素的出栈个数的记为f(n), 那么对于1,2,3, 我们很容易得出:                                   f(1) = 1     / ...

随机推荐

  1. Mongodb 5节点异地两中心故障转移恢复测试案例

    Mongodb5节点异地两中心故障转移恢复测试案例 架构方式:5节点,主中心(2数据1仲裁),备中心(1数据1仲裁) 1基本情况 操作系统:Red Hat Enterprise Linux Serve ...

  2. [机器学习基础]矩阵基础和numpy

    矩阵定义:[摘自百度百科] 由 m × n 个数aij排成的m行n列的数表称为m行n列的矩阵,简称m × n矩阵.记作: 这m×n 个数称为矩阵A的元素,简称为元,数aij位于矩阵A的第i行第j列,称 ...

  3. adb基本命令总结(Android Debug Bridge)

    adb 是PC和设备连接的桥梁,可以通过adb对devices进行相关操作 adb devices           列出你的devices adb kill-server         杀掉ad ...

  4. 重新认识synchronized(上)

    synchronized在JDK5之前一直被称为重量级锁,是一个较为鸡肋的设计,而在JDK6对synchronized内在机制进行了大量显著的优化,加入了CAS,轻量级锁和偏向锁的功能,性能上已经跟R ...

  5. Don’t panic, it’s just a kernel panic (ZT)

    http://blog.kreyolys.com/2011/03/17/no-panic-its-just-a-kernel-panic/ One of the main young sysadmin ...

  6. ie6 ie7下报脚本错误"Expected identifier, string or number" 的原因和解决方法

    在IE6和ie7里面,脚本报错"Expected identifier, string or number" 写下这个是个之前我已经很头疼了,因为我的代码在其他浏览器里都是正常的, ...

  7. 通过XmlSerializer接口来生成xml文件

    xml文件我们可以用来保存一些数据.例如用来备份短信.这个例子中,我们就用XmlSerializer接口来实现一个备份短信的程序.当然了,为了程序简单化,这个程序我们并不是真的去备份短信.我们通过一个 ...

  8. [Python Study Notes]物体运动检测

    基于opencv的cv2模块实现 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

  9. c++的单例模式及c++11对单例模式的优化

    单例模式 单例模式,可以说设计模式中最常应用的一种模式了,据说也是面试官最喜欢的题目.但是如果没有学过设计模式的人,可能不会想到要去应用单例模式,面对单例模式适用的情况,可能会优先考虑使用全局或者静态 ...

  10. JS对表单的操作

    JS对表单中的style的操作,包括复选框技术 废话不多说直接上文件代码!!! 功能:全选\反选,鼠标监测变颜色 <html> <head> <meta charset= ...