栈 ~ 程序实现一
本篇博客的内容为利用 C 中的 结构体 对数据结构中的 栈 进行代码实现!
其中涉及了栈的 增(入栈)删(出栈)查(栈顶元素)改(没写(~ ̄▽ ̄)~),判空,打印等操作!并附带了实例以及对应的运行结果!
注意:本篇博客中 栈 的程序实现借鉴了 利用结构体实现顺序表 的程序!
具体内容如下
 (1)newStack.h
#ifndef __NEWSTACK_H__
#define __NEWSTACK_H__
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef int STDataType;
//顺序结构实现:实现一个更简单的顺序表
typedef struct stack
{
	STDataType *_data;
	int _size;
	int _capacity;
}stack;
#endif
 
(2)main.c
#include"newStack.h"
void initStack(stack *st)
{
	//空栈
	if (st == NULL)
		return;
	st->_data = NULL;
	st->_size = st->_capacity = 0;
}
void checkCapacity(stack *st)
{
	if (st->_size == st->_capacity)
	{
		int newCap = st->_capacity == 0 ? 1 : 2 * st->_capacity;
		st->_data = (STDataType*)realloc(st->_data, sizeof(STDataType)*newCap);
		st->_capacity = newCap;
	}
}
void stackPush(stack *st, STDataType val)
{
	//尾插
	if (st == NULL)
		return;
	checkCapacity(st);
	st->_data[st->_size++] = val;
}
void stackPop(stack *st)
{
	//尾删
	if (st == NULL || st->_size == 0)
		return;
	--st->_size;
}
int stackSize(stack *st)
{
	if (st == NULL)
		return 0;
	return st->_size;
}
int stackEmpty(stack* st)
{
	if (st == NULL || st->_size == 0)
		return 1;//返回1为空
	else
		return 0;
	//return st->_size;
}
STDataType stackTop(stack *st)
{
	return st->_data[st->_size - 1];//栈顶元素
}
void stackDestory(stack *st)
{
	if (st)
	{
		if (st->_data)
		{
			free(st->_data);
			st->_data = NULL;
			st->_size = 0;
			st->_capacity = 0;
		}
	}
}
void stackPrint(stack *st)
{
	printf("栈内元素为:");
	int i = st->_size - 1;
	while (i >= 0)
	{
		printf("%d ", st->_data[i]);
		i--;
	}printf("\n");
}
void test()
{
	stack st;
	initStack(&st);
	stackPush(&st, 1);
	stackPush(&st, 2);
	stackPush(&st, 3);
	stackPush(&st, 4);
	stackPrint(&st);
	/* 打印栈内元素,并删除各个元素 */
	while (!stackEmpty(&st))
	{
		printf("%d ", stackTop(&st));
		stackPop(&st);
	}
	printf("\n");
	stackPrint(&st);// 结果为空,因为上面删除了所有元素
}
int main()
{
	test();
	system("pause");
	return 0;
}
 
(3)运行结果
 










