lstack.c

来自「栈(Stack)是限定只能在表的一端进行插入和删除操作的线性表。在表中」· C语言 代码 · 共 63 行

C
63
字号
/*
 * 作者: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 + =
减小字号Ctrl + -
显示快捷键?