1.用C语言实现栈常用操作:
(1)、初始化
(2)、入栈
(3)、出栈
(4)、取栈顶元素
(5)、获取栈中元素个数
(6)、判空
(7)、扩容
(8)、销毁
代码如下:
#include"stack.h"
#include<assert.h>
#include<malloc.h>
#include<stdio.h>
//初始化
void StackInit(Stack* ps)
{
assert(ps);
ps->array = (DataType*)malloc(sizeof(DataType) * 3);
if (ps->array == NULL)
{
assert(0);
return;
}
ps->capacity = 3;
ps->size = 0;
}
//扩容
void CheckCapacity(Stack* ps)
{
assert(ps);
if (ps->size == ps->capacity)
{
ps->array = (DataType*)realloc(ps->array, sizeof(DataType) * ps->capacity * 2);
if (ps->array == NULL)
{
assert(0);
return;
}
ps->capacity *= 2;
}
}
//入栈
void StackPush(Stack * ps, DataType data)
{
assert(ps);
CheckCapacity(ps);
ps->array[ps->size++] = data;
}
//出栈
void StackPop(Stack* ps)
{
assert(ps);
if (StackEmpty(ps))
{
return;
}
ps->size--;
}
//获取栈顶元素
DataType StackTop(Stack* ps)
{
assert(ps && !StackEmpty(ps));
return ps->array[ps->size - 1];
}
//获取栈中元素个数
int StackSize(Stack* ps)
{
assert(ps);
return ps->size;
}
//判空
int StackEmpty(Stack* ps)
{
assert(ps);
return ps->size == 0;
}
//销毁栈
void StackDestroy(Stack* ps)
{
assert(ps);
if (ps->array)
{
free(ps->array);
ps->capacity = 0;
ps->size = 0;
}
}
测试代码如下:
//测试
void StackTest()
{
Stack s;
StackInit(&s);
StackPush(&s, 1);
StackPush(&s, 2);
StackPush(&s, 3);
StackPush(&s, 4);
StackPush(&s, 5);
StackPush(&s, 6);
StackPush(&s, 7);
printf("size=%d",StackSize(&s));
printf("top=%d", StackTop(&s));
StackPop(&s);
StackPop(&s);
StackPop(&s);
printf("size=%d", StackSize(&s));
printf("top=%d", StackTop(&s));
StackDestroy(&s);
}
int main()
{
StackTest();
return 0;
}