顺序栈(C语言)

1、头文件sqstack.h

#include <stdio.h>
#define MAXSIZE 100

typedef struct SqStack
{
    void* data[MAXSIZE];
    int top;  //指向栈顶下标
}SqStack;

void InitStack(SqStack*);
int StackEmpty(SqStack*);
int StackLength(SqStack*);
void ClearStack(SqStack*);
void GetTop(SqStack*, void**);
void PushStack(SqStack*, void*);
void PopStach(SqStack*, void**);

2、相关函数操作文件sqstack.c

#include <stdio.h>
#include <string.h>
#include "SqStack.h"

//栈的初始化
void InitStack(SqStack* S)
{
    //空栈
    S->top = -1;
    memset(S->data, 0, sizeof(S->data));
}

int StackEmpty(SqStack* S)
{
    if(S->top == -1)
    {
        return 1;
    }

    return 0;
}

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

void GetTop(SqStack* S, void** e)
{
    if(S->top == -1)
    {
        printf("当前栈为空栈!");
        return;
    }

    *e = S->data[S->top];
}

void PushStack(SqStack* S, void* e)
{
    if(S->top == MAXSIZE - 1)
    {
        printf("栈满,无法压栈!");
        return;
    }
    S->top++;
    S->data[S->top] = e;
}

void PopStach(SqStack* S, void** e)
{
    if(S->top == -1)
    {
        printf("空栈,无法出栈!");
        return;
    }
    *e = S->data[S->top];
    S->top--;
}

int StackLength(SqStack* S)
{
    return S->top+1;
}

3、主函数测试文件main.c

#include <stdio.h>
#include <stdlib.h>
#include "SqStack.h"

typedef struct student
{
    int age;
    int id;
}stu;

int main()
{
    SqStack st;
    stu s[10];

    InitStack(&st);

    int i = 0;
    for(i = 0; i < 10; i++)
    {
        s[i].age = i + 20;
        s[i].id = i;
        PushStack(&st, &s[i]);
    }
    printf("当前栈的大小为:%d\n", StackLength(&st));

    stu* sp;
    for(i = 0; i < 5; i++)
    {
        GetTop(&st, (void**)&sp);
        printf("当前栈顶元素值为:%d, %d\n", sp->age, sp->id);

        PopStach(&st, (void**)&sp);
        printf("出栈元素值为:%d, %d\n", sp->age, sp->id);
        printf("\n");
    }

    printf("当前栈的大小为:%d\n", StackLength(&st));

    ClearStack(&st);
    printf("当前栈的大小为:%d\n", StackLength(&st));


    //printf("Hello world!\n");
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,727评论 0 3
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,919评论 0 38
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,145评论 1 32
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,421评论 0 2
  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 9,059评论 0 13