数据结构之顺序栈的实现

我们知道栈可以完成的基本操作是入栈,出栈,取栈顶元素,可以由顺序表形式实现,也可以由链表形式实现
今天我们就来实现一下顺序栈
首先来看下顺序栈的实现

seqstack.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<stddef.h>
#define HEADER printf("\n===============%s==============\n",__FUNCTION__);
typedef char seqstacktype;
typedef struct seqstack{
seqstacktype *data;
size_t capacity;//我们可以自行设置存储的容量,动态
size_t size;
}seqstack;
seqstack seq;
void seqstack_init(seqstack *seq);
void seqstack_print(seqstack *seq);
void seqstack_destory(seqstack *seq);
void seqstack_push(seqstack *seq,seqstacktype value);
void seqstack_pop(seqstack *seq)
int seqstack_gettop(seqstack *seq,seqstacktype value);

写完头文件之后就开始我们的函数

#include "seqstack.h"
void seqstack_init(seqstack *seq);
{
    if(seq == NULL)
    {
        return;
    }
    seq->size = 0;
    seq->capacity = 1000;
    seq->data = (seqstacktype*)malloc(seq->capacity*sizeof(seqstacktype));
    retyrn;
}
void seqstack_print(seqstack *seq)
{
    if(seq == NULL)
    {
        return;
    }
    if(seq->size == 0)
    {
        return;
    }
    int i = 0;
    for(;i<seq->size;i++)
    {
        printf("[%c] ",seq->data[i]);
    }
    printf("\n");
}
void seqstack_resize(seqstack *seq)
{
    if(seq == NULL)
    {
        return;
    }
    seqstacktype *newdata = (seqstacktype *)malloc(seq->capacity*sizeof(seqstacktype)*2+1);
    int i = 0;
    for(;i<seq->size;i++)
    {
        newdata[i] = data[i];
    }
    free(seq->data);
    seq->data = newdata;
    return;
}
void seqstack_push(seqstack *seq,seqstacktype value)
{
    if(seq == NULL)
    {
        return;
    }
    if(seq->size >= seq->capacity)
    {
        seqstack_resize(seq);
    }
    else
    {
        seq->data[seq->size++] = value;
        return;
    }
}
void seqstack_pop(seqstack *seq)
{
    if(seq == NULL)
    {
        return;
    }
    if(seq->size == 0)
    {
        return;
    }
    seq->size--;
}
int seqstack_gettop(seqstack *seq,seqstacktype *value)
{
    if(seq == NULL)
    {
        return 0;
    }
    if(seq->size == 0)
    {
        return 0;
    }
    *value = seq->data[size-1];
    return 1;

}
void seqstack_destroy(seqstack *seq)
{
    if(seq == NULL)
    {
        return;
    }
    seq->size = 0;
    free(seq->data);
    return;
}

下面是测试函数和效果
这里写图片描述这里写图片描述这里写图片描述

阅读更多
个人分类: 数据结构
所属专栏: 数据结构历程
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭