⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sqstack.c

📁 和线性表类似
💻 C
字号:
/*
 * 作者:antigloss
 * 最后修改:05-8-27 19:50
 * 蚂蚁的 C/C++ 标准编程
 *    cpp.ga-la.com
 */

#include <stdio.h>
#include <stdlib.h>
#include "../header/sqstack.h"

/* begin of ClearStack 05-8-27 19:35 */
void ClearStack( SqStack *S )  /*将 S 置为空栈。*/
{
	S->top = S->base;
} /* end of ClearStack */

/* begin of DestroyStack 05-8-27 19:45 */
void DestroyStack( SqStack *S )  /* 销毁栈S,S 不再存在。*/
{
	free( S->base );
	S->base = S->top = NULL;
	S->stacksize = 0;
} /* end of DestroyStack */

/* begin of GetTop 05-8-27 18:40 */
int GetTop(SqStack *S, int *e) /* 返回栈顶元素 */
{
	if ( S->base == S->top ) { /* 栈空,返回0 */
		return 0;
	}

	*e = *(S->top - 1);
	return 1; /* 栈不空,返回1 */
} /* end of GetTop */

/* begin of InitStack 05-8-27 17:35 */
int InitStack(SqStack *S) /* 创建一个空栈 */
{
	S->base = malloc( INIT_SIZE * sizeof *S->base );
	if ( !S->base ) { /* 空间分配失败 */
		return 0;
	}
	/* 空间分配成功 */
	S->top = S->base; /* 置栈顶指针 */
	S->stacksize = INIT_SIZE; /* 初始化栈大小 */

	return 1; /* 空栈创建成功 */
} /* end of InitStack */

/* begin of Pop 05-8-27 19:20 */
int Pop(SqStack *S, int *e) /* 删除栈顶元素 */
{
	if ( S->base == S->top ) { /* 栈空,返回0 */
		return 0;
	}

	*e = *(--S->top); /* 栈不空,栈顶指针下移(即删除栈顶元素)*/
	return 1; /* 栈不空,返回1 */	
} /* end of Pop */

/* begin of Push 05-8-27 18:35 */
int Push(SqStack *S, int e) /* 插入栈顶 */
{
	if ( (unsigned)(S->top - S->base) == S->stacksize ) { /* 栈满,追加存储空间 */
		int *newbase = realloc( S->base, (S->stacksize + INCREMENT) * sizeof *newbase );
		if ( !newbase ) { /* 分配失败,返回0 */
			return 0;
		}
		/* 分配成功 */
		S->base = newbase;
		S->top = S->base + S->stacksize; /* 置栈顶指针 */
		S->stacksize += INCREMENT; /* 重置栈大小 */
	}

	*S->top = e;
	++S->top; /* 接收输入后,S->top指向栈顶元素的下一个位置 */

	return 1;
} /* end of InitStack */

/* begin of StackEmpty 05-8-27 19:40 */
int StackEmpty( SqStack *S )  /* 若栈 S 为空栈,则返回 1,否则返回 0。*/
{
	return !(S->top - S->base);
} /* end of StackEmpty */

/* begin of StackLength 05-8-27 19:30 */
unsigned StackLength( SqStack *S )  /* 返回 S 的元素个数,即栈的长度。*/
{
	return (unsigned)(S->top - S->base);
} /* end of StackLength */

/* begin of StackTraverse 05-8-27 19:00 */
void StackTraverse( SqStack *S ) /* 显示堆栈内容 */
{
	int *base = S->base;

	while ( base != S->top ) {
		putchar( *base++ );
	}
} /* end of StackTraverse */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -