顺序栈的创建及操作

#ifndef  _SQ_STACK_  
#define _SQ_STACK_

typedef struct {
	int *base;
	int *top;
	int stack_size;
}SqStack;

#endif // ! _SQ_STACK_


#ifndef _STACKOP_
#define _STACKOP_

void Init_Stack(SqStack *s);
void Destory_Stack(SqStack *s);
void Get_Top(SqStack *s, int *e);
void Push(SqStack *s, int e);
void Pop(SqStack *s, int *e);
void Print_Stack(SqStack s);

#endif // !_STACKOP_

#include <stdio.h>
#include <stdlib.h>
#include "SqStack.h"
#include "StackOp.h"

#define MAX 100		//initial size
#define INCREMENT 10	//incremental size

//top=base作为栈空的标志;top指针始终指向栈顶元素的下一个位置
void Init_Stack(SqStack *s) {
	s->base = (int *)malloc(MAX * sizeof(int));	//指针数组操作
	s->top = s->base;
	s->stack_size = MAX;
}

void Destory_Stack(SqStack *s) {
	free(s->base);
}

//非空栈时,返回top-1的栈顶元素的值
void Get_Top(SqStack *s, int *e) {
	if (s->top == s->base) {
		printf("Wrong!\n");
	}
	else {
		*e = *(s->top - 1);
	}
}

void Push(SqStack *s, int e) {	//入栈
	if (s->top - s->base >= s->stack_size) {	//栈满,加空间
		s->base = (int *)realloc(s->base, (MAX + INCREMENT) * sizeof(int));	//指针数组操作
		s->top = s->base + s->stack_size;
		s->stack_size += INCREMENT;
	}
	*(s->top)++ = e;
}

void Pop(SqStack *s, int *e) {	//出栈
	if (s->top == s->base) {	//空栈
		printf("Wrong!\n");
	}
	else {
		*e = *--(s->top);
	}
}

void Print_Stack(SqStack s) {
	printf("The stack is:\n");
	s.top -= 1;		//top指针指向栈顶元素
	for (; s.top >= s.base; s.top--) {
		printf("%d\n", *s.top);
	}
}

#include <stdio.h>
#include <stdlib.h>
#include "SqStack.h"
#include "StackOp.h"

int main() {
	SqStack stack;
	Init_Stack(&stack);
	int num = 0;
	do {
		printf("input numbers to stack\n");
		scanf("%d", &num);
		if (num != -1) {
			Push(&stack, num);
		}
	} while (num != -1);
	Print_Stack(stack);
	int e = 0;
	Pop(&stack, &e);
	Print_Stack(stack);
	return 0;
}


猜你喜欢

转载自blog.csdn.net/jzjz73/article/details/79337307