用C语言实现栈以及栈的简单操作

一   栈的定义:

栈(堆栈)是一种线性表,它的特点是仅允许在栈的一端进行插入、删除等操作。栈底固定,栈顶浮动。其特性为后进先出。一般栈中元素为0时,称为空栈。它有两种实现方式,顺序栈与链栈,下面将简单的说明一下顺序栈及链栈的生成与简单操作。

栈的简单操作如图所示:(top从0到3的改变体现着入栈与出栈)

二   顺序栈:

顺序栈:静态栈,以顺序表的方式实现栈以及栈的简单操作。顺序栈的模型为:

顺序栈的见到操作的具体代码如下所示:

头文件:

#include<stdio.h>
#include<assert.h>
#include<windows.h>

typedef int SDataType;

typedef struct Stack {
	SDataType array[100];
	int top;
	//此处的array[top]表示下一个可用位置
	//此处的array[top-1]表示栈顶元素位置
	//top表示栈里现在有多少数据
} Stack;

// 初始化 
Stack* StackInit(Stack *pStack);

// 压栈 
void StackPush(Stack *pStack, SDataType data);

// 出栈 
void StackPop(Stack *pStack);

// 返回栈顶元素 
SDataType StackTop(Stack *pStack);

// 判断是否为空 
// 1 空 
// 0 不空 
int StackIsEmpty(Stack *pStack);

// 返回数据个数 
int StackSize(Stack *pStack);
//打印栈
void StackPrint(Stack *pStack);


// 初始化 
Stack* StackInit(Stack *pStack)
{
	//Stack * pStack1 = (Stack *)malloc(sizeof(Stack));
	//assert(pStack1 != NULL);//确定栈创建成功,如果pStack == NULL,整个程序直接退出
	pStack->top = 0;//栈里的数据个数为0
	return pStack;
}

// 压栈 
// 压栈就是让栈顶元素等于所要入栈的元素,再让top++;(前提条件是栈未满)
void StackPush(Stack *pStack, SDataType data)
{
	assert(pStack != NULL);
	assert(pStack->top < 100);
	pStack->array[pStack->top] = data;
	pStack->top++;
}

// 出栈 
// 出栈的前提是栈里有元素,然后只需要让栈顶指针减减
void StackPop(Stack *pStack)
{
	assert(pStack != NULL);
	assert(pStack->top >0);
	pStack->top--;
}

// 返回栈顶元素 
// 前提是栈中有元素,需要将栈顶指针减减
int StackTop(Stack *pStack)
{
	assert(pStack != NULL);
	assert(pStack->top > 0);
	pStack->top--;
	return(pStack->array[pStack->top]);
}

// 判断是否为空 
// 1 空 
// 0 不空 
int StackIsEmpty(Stack *pStack)
{
	assert(pStack != NULL);
	if (pStack->top == 0)
		return 1;
	else
		return 0;
}

// 返回数据个数 
int StackSize(Stack *pStack)
{
	assert(pStack != NULL);
	pStack->top++;
	return (pStack->top);
}
//打印栈
void StackPrint(Stack *pStack)
{
	int i = pStack->top;
	while (i != 0)
	{
		printf("%d ", pStack->array[i-1]);
		i--;
	}
	printf("\n");
}

.c文件:

#include"stack.h"
void test()
{
	Stack pStack1;
	StackInit(&pStack1);
	StackInit(&pStack2);
	StackPush(&pStack1,1);
	StackPush(&pStack1,3);
	StackPush(&pStack1,5);
	StackPush(&pStack1,7);
	StackPrint(&pStack1);
	
	StackPop(&pStack1);
	StackPop(&pStack1);
	StackPrint(&pStack1);

	int p = StackTop(&pStack1);
	printf("栈顶元素为:%d\n", p);

	int p1 = StackIsEmpty(&pStack1);
	printf("%d\n", p1);

	int p2 = StackSize(&pStack1);
	printf("栈内有%d个元素\n", p2);


}
int main()
{
	test();
        system("pause");
	return 0;
}

关于栈的一些内容,若有不对,还请指正。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/zr147258369/article/details/83418192