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

📄 astack.c

📁 This program is free software you can redistribute it and/or modify it under the terms of the GN
💻 C
字号:
/************************************************************************  This program is part of the	OpenMP Source Code Repository	http://www.pcg.ull.es/OmpSCR/	e-mail: ompscr@zion.deioc.ull.es  This program is free software; you can redistribute it and/or modify  it under the terms of the GNU General Public License as published by  the Free Software Foundation; either version 2 of the License, or  (at your option) any later version.  This program is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  GNU General Public License for more details.  You should have received a copy of the GNU General Public License   (LICENSE file) along with this program; if not, write to  the Free Software Foundation, Inc., 59 Temple Place, Suite 330,   Boston, MA  02111-1307  USA	**************************************************************************//** AStack.c:*	Module for integer type stack** Version:	1.0* Date:		Mon Jun  7 1999* Copyright (C) 1999, Arturo Gonzalez Escribano** Adapted by Arturo Gonzalez-Escribano for OmpSCR, Jun 2004*/#include <stdio.h>#include "ATypes.h"#include "AError.h"#include "AStack.h"/* --------------------------------------------------------------------* 1. INITIALIZE FUNCTION*/Astack Ast_init (void){	Astack	stack = NULL;	/* 1. CREATING SPACE FOR THE NEW POINTER */	stack = (Astack) malloc(sizeof(AstNode));	if (stack == NULL)		Asystem_error("Ast_init","Not enough memory", "-");	/* 2. INITIALIZE THE POINTER TO NULL */	*stack = NULL;	/* 3. RETURNING THE NEW STACK */	return stack;}/* -------------------------------------------------------------------- * PUSH OPERATION */void Ast_push (Astack stack, int datum){	AstNode	node = NULL;	/* 1. CREATING SPACE FOR THE NEW NODE */	node = (AstNode) malloc(sizeof(Astnode));	if (node == NULL)		Asystem_error("Ast_push","Not enough memory", "-");	/* 2. INITIALIZING FIELDS */	node->datum = datum;	node->next = *stack;	/* 3. CHANGING THE STACK POINTER */	*stack = node;}/* -------------------------------------------------------------------- * POP OPERATION */int Ast_pop (Astack stack){	AstNode	node = NULL;	int	datum;	/* 0. CHECK EMPTY */	if (Ast_more(stack)==FALSE)		Asystem_error("Ast_pop","Empty stack","");	/* 1. REMEMBER THE NEXT POINTER */	node = (*stack)->next;	/* 2. REMEMBER THE TASK POINTER */	datum = (*stack)->datum;	/* 3. FREEING THE SPACE OF THE NODE */	free(*stack);	/* 4. CHANGING THE STACK POINTER */	*stack = node;	/* 5. RETURNING THE TASK POINTER */	return datum;}/* -------------------------------------------------------------------- * CLEAN STACK */void Ast_clean (Astack stack){	AstNode	node = NULL;	/* 1. FOR ALL NODES ON THE STACK, FREE SPACE */	for (node = *stack;		node != NULL;		node = *stack )		{		*stack = node->next;		free(node);		}	/* 2. END ( *stack IS JUST NULL) */}/* -------------------------------------------------------------------- * DELETE A STACK */void Ast_delete (Astack stack){	/* 1. CLEAN THE STACK ELEMENTS */	Ast_clean (stack);	/* 2. FREE SPACE OF THE STACK POINTER */	free(stack);	stack = NULL;	/* 3. END */}/* -------------------------------------------------------------------- * ARE THERE MORE ELEMENTS ON THE STACK ? */Bool Ast_more (Astack stack){	/* 1. COMPARE THE POINTER OF THE STACK WITH NULL */	if (*stack == NULL)		return FALSE;	else		return TRUE;	/* 2. END */}

⌨️ 快捷键说明

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