C语言实现顺序栈

C语言实现顺序栈

main.c

#include "stack.h"

void test();

ElementType dataArray[] = {
    {1,"侠客行"},
    {2,"将进酒"},
    {3,"神来之笔"},
    {4,"青莲剑歌"}
};


int main()
{
    test();
    return 0;
}


void test(){
    SeqStack  seqstack;
    ElementType * element = (ElementType *)malloc(sizeof(SeqStack));
    InitSeqStack(&seqstack);
    for (int i=0;i<4;i++){
        PushSeqStack(&seqstack,dataArray[i]);
        printf("当前入栈:%d\t%s.\n",dataArray[i].id,dataArray[i].name);
    }
    PopSeqStack(&seqstack,element);
    printf("当前出栈:%d\t%s.\n",element->id,element->name);
}

stack.h

#ifndef STACK_H_INCLUDED
#define STACK_H_INCLUDED

#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 255
#define TRUE 1
#define FALSE 0

typedef struct {
    int id;
    char * name;
}ElementType;

//定义栈的顺序存储方式
typedef struct SeqStack{
    ElementType elements[MAX_SIZE];     //顺序栈中用来存放数据元素的数组
    int top;                            //栈顶(数组中元素的下标),如果为-1则证明栈为空
    int length;                         //当前栈的元素个数
}SeqStack;

//初始化栈
void InitSeqStack(SeqStack * seqstack);

//元素入栈,返回插入结果:true或false
int PushSeqStack(SeqStack * seqstack,ElementType element);

//出栈,返回出栈结果:true或false
int PopSeqStack(SeqStack * seqstack,ElementType * element);

//清空栈
void ClearSeqStack(SeqStack * seqstack);

//返回栈顶元素
void GetTopElement(SeqStack * seqstack,ElementType * element);

#endif // STACK_H_INCLUDED

stack.c

#include "stack.h"

//初始化栈
void InitSeqStack(SeqStack * seqstack){
    seqstack->top = -1;
    seqstack->length = 0;
}

//元素入栈,返回插入结果,true或false
int PushSeqStack(SeqStack * seqstack,ElementType element){
    if(seqstack->top == MAX_SIZE-1){
        printf("栈已满.");
        return FALSE;
    }
    seqstack->top++;           //栈顶指针+1,以便加入新的元素
    seqstack->elements[seqstack->top] = element;
    seqstack->length++;
    return TRUE;
}

//出栈,返回出栈结果:true或false
int PopSeqStack(SeqStack * seqstack,ElementType * element){
    if (seqstack->top == -1){
        printf("空栈,无法出栈.\n");
    }
    *element = seqstack->elements[seqstack->top]; //放回栈顶指向的元素
    seqstack->length--;
    seqstack->top--;
    return TRUE;
}

//清空栈
void ClearSeqStack(SeqStack * seqstack){
    seqstack->length = 0;
    seqstack->top = -1;
}

//返回栈顶元素
void GetTopElement(SeqStack * seqstack,ElementType * element){
    if (seqstack->top == 1){
        printf("空栈.");
        element = NULL;
        return;
    }
    *element = seqstack->elements[seqstack->top];
}

链栈

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值