我们知道栈可以完成的基本操作是入栈,出栈,取栈顶元素,可以由顺序表形式实现,也可以由链表形式实现
今天我们就来实现一下顺序栈
首先来看下顺序栈的实现
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;
}
下面是测试函数和效果