栈的基本操作

由于c语言中没有bool类型,所以可以自己定义一个bool类型

#define true 1  
#define false 0 

栈的结构体

typedef struct {
	int data[maxsize];
	int top;
} sqstack;

初始化栈

int initstack(sqstack* s)//初始化栈
{
	s->top = -1;
	return true;
}

栈的判空操作

int stackempty(sqstack* s)//栈判空
{
	if (s->top == -1)
		return true;
	else
		return false;
}

栈的进栈操作

int push(sqstack* s, int x)//进栈操作
{
	if (s->top == maxsize - 1)
		return false;
	s->top++;
	s->data[s->top] = x;
	return true;
}

栈的出栈操作

int pop(sqstack* s, int* x)//出栈操作
{
	if (s->top == -1)
		return false;
	*x = s->data[s->top];
	s->top--;
	return true;
}

读取栈顶元素

int gettop(sqstack* s, int* x)//读取栈顶元素
{
	if (s->top == -1)
		return false;
	*x = s->data[s->top];
	return true;
}

完整的测试代码

#define maxsize 10  
#define true 1  
#define false 0  
typedef struct {
	int data[maxsize];
	int top;
} sqstack;
int initstack(sqstack* s)//初始化栈
{
	s->top = -1;
	return true;
}
int stackempty(sqstack* s)//栈判空
{
	if (s->top == -1)
		return true;
	else
		return false;
}
int push(sqstack* s, int x)//进栈操作
{
	if (s->top == maxsize - 1)
		return false;
	s->top++;
	s->data[s->top] = x;
	return true;
}
int pop(sqstack* s, int* x)//出栈操作
{
	if (s->top == -1)
		return false;
	*x = s->data[s->top];
	s->top--;
	return true;
}
int gettop(sqstack* s, int* x)//读取栈顶元素
{
	if (s->top == -1)
		return false;
	*x = s->data[s->top];
	return true;
}
#include  
int main() {
	sqstack s;
	initstack(&s); //初始化栈  
	if (!stackempty(&s)) //栈判空  
		printf("栈不为空\n");
	else
		printf("栈为空\n");
	int x = 0;
	printf("要进栈的元素为:");
	scanf("%d", &x);
	if (push(&s, x)) //进栈操作  
		printf("进栈元素为%d\n", x);
	else
		printf("栈满,不能进栈%d\n", x);
	if (pop(&s, &x)) //出栈操作  
		printf("出栈元素为%d\n", x);
	else
		printf("栈为空,不能出栈\n");
	printf("%d\n", x);
	if (gettop(&s, &x)) //获取栈顶元素操作  
		printf("栈顶元素为%d\n", x);
	else
		printf("栈为空\n");
	return 0;
}

栈的基本操作_第1张图片

你可能感兴趣的:(数据结构,算法,c语言)