栈的简单理解以及对栈的基本操作

一.静态栈的简单操作

先来简单的了解一下栈
1.栈:一种特殊的线性表,其实只允许在固定的一端进行插入或删除操作。进行数据插入和删除的一端称为栈顶,另一端称为栈底。不含任何元素的栈称为空栈,栈又称为 后进先出的线性表

特性栈:后进先出(LILO)特殊线性表
栈功能:将数据从一种序列改变为另一种序列

2.顺序栈和顺序表数据成员相同,不同之处: 顺序栈的入栈和出栈操作只允许对当前栈顶进行操作

顺序栈所有的的操作时间复杂度为O(1)
注意:面试中如果需要用到栈,封装静态栈

下边来看一些对栈进行简单操作的代码

stack.h

#pragma once
#include<stdio.h>
#include<Windows.h>

typedef int DataType;
#define MAX_SIZE 100 

typedef struct Stack
{
DataType _array[MAX_SIZE];
int _top;
}Stack;

// 栈的初始化 
void StackInit(Stack* s);

// 入栈 
void StackPush(Stack* s, DataType data);

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

// 获取栈顶元素 
DataType StackTop(Stack* s);

// 获取栈中元素个数 
int StackSize(Stack* s);

// 检测栈是否为空 
int StackEmpty(Stack* s);

//打印栈
void stackprint(Stack* s);

stack.c

#include"stack.h"

//初始化栈
void StackInit(Stack* s)
{
if (NULL == s)
{
	return;
}
s->_top = (Stack*)malloc(sizeof(Stack));
s->_top = 0;
}

//入栈
void StackPush(Stack* s, DataType data)
{
if (NULL == s)
{
	printf("栈已空!!!");
	return;
}

s->_array[s->_top] = data;
++s->_top;

}

//出栈
void StackPop(Stack* s)
{
if (NULL == s)
{
	printf("栈已空!!!");
	return;
}
if (s->_top == 0)
{
	printf("栈已空!!!");
	return;
}
s->_top--;


}

//打印栈顶元素
DataType StackTop(Stack* s)
{
if (NULL == s)
{
	printf("栈已空!!!");
	return 0;
}
return s->_array[s->_top - 1];

}

//打印栈的元素个数
int StackSize(Stack* s)
{
if (NULL == s)
{
	printf("栈已空!!!");
	return 0;
}
return s->_top;
}

//判断元素是否为空
int StackEmpty(Stack* s)
{
if (NULL == s)
{
	printf("栈已空!!!");
	return 0;
}
if (s->_top == 0)
{
	printf("栈已空!!!");
	return 0;
}

return 1;

}

//打印栈
void stackprint(Stack* s)
{
int i = 0;
if (NULL == s)
	return;
for (; i < s->_top; i++)
{
	printf("%d ", s->_array[i]);

}
printf("\n");


}

test.c

#include"stack.h"

void test()
{
	Stack s;
	StackInit(&s);

	StackPush(&s,2);
	StackPush(&s,3);
	StackPush(&s,4);
	StackPush(&s,5);
	stackprint(&s);
	StackPop(&s);
	stackprint(&s);
	StackTop(&s);



}

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

}

猜你喜欢

转载自blog.csdn.net/alidada_blog/article/details/80092438