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

📄 lstack.c

📁 栈(Stack)是限定只能在表的一端进行插入和删除操作的线性表。在表中
💻 C
字号:
/*
 * 作者:antigloss
 * 最后修改:05-8-27 21:30
 * 蚂蚁的 C/C++ 标准编程
 *    cpp.ga-la.com
 */

#include <stdlib.h>
#include "../header/lstack.h"

/* begin of destroy_stack 05-8-27 21:25 */
void destroy_stack( LStack *S ) /* 销毁栈 */
{
	LinkList q;

	while ( S->top ) {
		q = S->top;
		S->top = S->top->next; /* 修改栈顶指针 */
		free( q ); /* 释放被删除的结点空间 */
	}
	S->length = 0;
} /* end of destroy_stack */

/* begin of init_stack 05-8-27 20:40 */
void init_stack( LStack *S ) /* 构造空栈 */
{
	S->top = NULL;   /* 栈顶指针初值为空 */
	S->length = 0;   /* 空栈中元素个数为 0 */
} /* end of init_stack */

/* begin of pop 05-8-27 21:15 */
int pop( LStack *S, int *e )
{   /* 若栈不空,则删除 S 的栈顶元素,用 e 返回栈顶元素的值。*/
	LinkList q;

	if ( !S->top ) {
		return 0;
	}
	
	*e = S->top->data; /* 返回栈顶元素 */
	q = S->top;
	S->top = S->top->next; /* 修改栈顶指针 */
	--S->length; /* 栈的长度减1 */

	free( q ); /* 释放被删除的结点空间 */
	return 1;
} /* end of pop */

/* begin of push 05-8-27 20:45 */
int push( LStack *S, int e )
{
	/* 在栈顶之上插入元素 e 为新的栈顶元素 */
	LinkList p = malloc( sizeof *p ); /* 建新的结点 */
	if ( !p ) {
		return 0; /* 存储分配失败 */
	}
	p->data = e;
	p->next = S->top; /* 链接到原来的栈顶 */
	S->top = p;       /* 移动栈顶指针 */
	++S->length;      /* 栈的长度增1 */

	return 1;
} /* end of push */

⌨️ 快捷键说明

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