顺序表栈C语言实现

/*
 * SeqStack.h
 *
 *  Created on: 2019年8月1日
 *      Author: Administrator
 */

#ifndef SEQSTACK_H_
#define SEQSTACK_H_



//数组去模拟栈的顺序存储, 有数组的后面模拟栈顶 ,避免数据频繁移动
#define MAX_SIZE 1024
#define SEQ_STACK_TRUE 1
#define SEQ_STACK_FALSE 0

typedef struct SEQSTACK {
    void *data[MAX_SIZE];
    int size;
} SeqStack;

//栈的初始化
SeqStack *Init_SeqStack();

//入栈
void Push_SeqStack(SeqStack *stack, void *data);

//返回栈顶元素
void *Top_SeqStack(SeqStack *stack);

//出栈
void Pop_SeqStack(SeqStack *stack);

//判断是否为空
int IsEmpty(SeqStack *stack);

//返回栈中元素个数
int Size_SeqStack(SeqStack *stack);

//清空栈
void Clear_SeqStack(SeqStack *stack);

//销毁
void FreeSpace_SeqStack(SeqStack *stack);

#endif /* SEQSTACK_H_ */
/*
 * SeqStack.c
 *
 *  Created on: 2019年8月1日
 *      Author: Administrator
 */

#include "SeqStack.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>


//栈的初始化
SeqStack *Init_SeqStack() {
    SeqStack *stack = (SeqStack *)malloc(sizeof(SeqStack));
    for(int i = 0; i < MAX_SIZE; i++){
        stack->data[i] = NULL;
    }
    stack->size = 0;
    return stack;
}

//入栈
void Push_SeqStack(SeqStack *stack, void *data) {
    if(stack == NULL){
        return;
    }
    if(stack->size == MAX_SIZE) {
        return;
    }

    if(data == NULL){
        return;
    }

    stack->data[stack->size] = data;
    stack->size++;


}

//返回栈顶元素
void *Top_SeqStack(SeqStack *stack) {
    if(stack == NULL){
        return NULL;
    }
    if(stack->size == 0){
        return NULL;
    }
    return stack->data[stack->size-1];
}

//出栈
void Pop_SeqStack(SeqStack *stack) {
    if(stack == NULL){
        return;
    }
    if(stack->size == 0){
        return;
    }
    stack->data[stack->size-1] = NULL;
    stack->size--;
}
//判断是否为空
int IsEmpty(SeqStack *stack) {
    if(stack == NULL){
        return -1;
    }
    if(stack->size == 0){
        return SEQ_STACK_TRUE;
    }

    return SEQ_STACK_FALSE;
}

//返回栈中元素个数
int Size_SeqStack(SeqStack *stack) {
    return stack->size;
}

//清空栈
void Clear_SeqStack(SeqStack *stack) {
    if(stack == NULL){
        return;
    }
    for(int i = 0;i < stack->size; i++){
        stack->data[i] = NULL;
    }
    stack->size = 0;
}

void FreeSpace_SeqStack(SeqStack *stack){
    if(stack == NULL){
        return;
    }
    free(stack);
}

/*
 * main.c
 *
 *  Created on: 2019年8月1日
 *      Author: Administrator
 */
#include "SeqStack.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>


typedef struct PERSON {
    char name[64];
    int age;
} Person;


int main(){
    printf("栈  \n");

    //创建栈
    SeqStack *stack = Init_SeqStack();

    //创建数据
    Person p1 = {"Jarvis1", 11};
    Person p2 = {"Jarvis2", 12};
    Person p3 = {"Jarvis3", 13};
    Person p4 = {"Jarvis4", 14};
    Person p5 = {"Jarvis5", 15};


    //入栈
    Push_SeqStack(stack, &p1);
    Push_SeqStack(stack, &p2);
    Push_SeqStack(stack, &p3);
    Push_SeqStack(stack, &p4);
    Push_SeqStack(stack, &p5);

    //输出
    while(Size_SeqStack(stack) > 0) {
        //访问栈顶元素
        Person *person = (Person *)Top_SeqStack(stack);
        printf("Name: %s, Age: %d \n", person->name, person->age);
        //弹出栈顶元素
        Pop_SeqStack(stack);
    }

    //释放内存
    FreeSpace_SeqStack(stack);

    system("pause");
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/wjw-blog/p/11324882.html