順序棧(C語言)

1、頭文件sqstack.h

#include <stdio.h>
#define MAXSIZE 100

typedef struct SqStack
{
    void* data[MAXSIZE];
    int top;  //指向棧頂下標(biāo)
}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、相關(guān)函數(shù)操作文件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("當(dāng)前棧為空棧!");
        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、主函數(shù)測試文件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āng)前棧的大小為:%d\n", StackLength(&st));

    stu* sp;
    for(i = 0; i < 5; i++)
    {
        GetTop(&st, (void**)&sp);
        printf("當(dāng)前棧頂元素值為:%d, %d\n", sp->age, sp->id);

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

    printf("當(dāng)前棧的大小為:%d\n", StackLength(&st));

    ClearStack(&st);
    printf("當(dāng)前棧的大小為:%d\n", StackLength(&st));


    //printf("Hello world!\n");
    return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom閱讀 3,196評論 0 3
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,246評論 0 38
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹 對...
    cosWriter閱讀 11,649評論 1 32
  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,031評論 0 2
  • 專業(yè)考題類型管理運行工作負責(zé)人一般作業(yè)考題內(nèi)容選項A選項B選項C選項D選項E選項F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 10,529評論 0 13

友情鏈接更多精彩內(nèi)容