stack栈
来源:互联网 发布:数据库入门书籍推荐 编辑:程序博客网 时间:2024/05/16 04:41
#ifndef _ARRAYSTACK_H_
#define _ARRAYSTACK_H_
#include<malloc.h>
#include<stdio.h>
#include<conio.h>
typedef struct USER_TYPE
{
int age;
int clas;
char *name;
double weight;
} USER_TYPE;
/**
*元素类型:USER_TYPE
*头结点:ARRAYSTACK
*
*/
typedef struct ARRAYSTACK
{
USER_TYPE *data;
int stackMaxRoom;
int stackTop;
}ARRAYSTACK;
typedef unsigned int boolean;
#define FALSE 0
#define TRUE 1
#define STACK_BUTTOM (-1)
boolean InitArrayStack(ARRAYSTACK **stack,int stackMaxRoom);
void DestroyArrayStack(ARRAYSTACK **stack);
boolean IsArrayStackFull(ARRAYSTACK *head);
boolean IsArrayStackEmpty(ARRAYSTACK *head);
boolean PopArrayStackElement(ARRAYSTACK *head,USER_TYPE *vout);
boolean PushArrayStackElement(ARRAYSTACK *head,USER_TYPE vin);
boolean PushArrayStackElement(ARRAYSTACK *head,USER_TYPE vin)
{
boolean OK = TRUE;
if(IsArrayStackFull(head) == FALSE)
{
head->data[++head->stackTop] = vin;
}
else
{
OK = FALSE;
}
return OK;
}
boolean PopArrayStackElement(ARRAYSTACK *head,USER_TYPE *vout)
{
boolean OK = TRUE;
if(IsArrayStackEmpty(head) == FALSE)
{
(*vout) = head->data[head->stackTop--];
}
else
{
OK = FALSE;
}
return OK;
}
boolean IsArrayStackEmpty(ARRAYSTACK *head)
{
boolean OK = TRUE;
OK = (head->stackTop == STACK_BUTTOM);
return OK;
}
boolean IsArrayStackFull(ARRAYSTACK *head)
{
boolean OK = TRUE;
OK = (head->stackTop >= head->stackMaxRoom);
return OK;
}
void DestroyArrayStack(ARRAYSTACK **stack)
{
if((*stack) != NULL)
{
if((*stack)->data != NULL)
{
free((*stack)->data);
(*stack)->data = NULL;
}
free((*stack));
(*stack) = NULL;
}
}
boolean InitArrayStack(ARRAYSTACK **stack,int stackMaxRoom)
{
boolean OK = TRUE;
if((*stack) != NULL)
{
OK = FALSE;
}
else if(stackMaxRoom <= 0)
{
OK = FALSE;
}
else//(*stack)==NULL && stackMaxRoom > 0
{
(*stack) = (ARRAYSTACK *)malloc(sizeof(ARRAYSTACK));
if((*stack) != NULL)
{
(*stack)->data = (USER_TYPE *)malloc(sizeof(USER_TYPE)*stackMaxRoom);
if((*stack)->data != NULL)
{
(*stack)->stackTop = STACK_BUTTOM;
(*stack)->stackMaxRoom = stackMaxRoom;
}
else
{
OK = FALSE;
free(*stack);
(*stack) = NULL;
}
}
else
{
OK = FALSE;
}
}
return OK;
}
/*
void main(void)
{
ARRAYSTACK *stack = NULL;
USER_TYPE v1={12,20,"张鹏",23.4},v2={15,30,"张三",34.4},t1,t2;
int i;
InitArrayStack(&stack,10);
PushArrayStackElement(stack,v1);
PushArrayStackElement(stack,v2);
PopArrayStackElement(stack,&t1);
PopArrayStackElement(stack,&t2);
printf("%4d %4d %s %lf %s\n",t1.age,t1.clas,t1.name,t1.weight);
printf("%4d %4d %s %lf %s\n",t2.age,t2.clas,t2.name,t2.weight);
printf("%s空栈",(IsArrayStackEmpty(stack)) ? "是" : "不是");
DestroyArrayStack(&stack);
getch();
}
*/
#endif
#define _ARRAYSTACK_H_
#include<malloc.h>
#include<stdio.h>
#include<conio.h>
typedef struct USER_TYPE
{
int age;
int clas;
char *name;
double weight;
} USER_TYPE;
/**
*元素类型:USER_TYPE
*头结点:ARRAYSTACK
*
*/
typedef struct ARRAYSTACK
{
USER_TYPE *data;
int stackMaxRoom;
int stackTop;
}ARRAYSTACK;
typedef unsigned int boolean;
#define FALSE 0
#define TRUE 1
#define STACK_BUTTOM (-1)
boolean InitArrayStack(ARRAYSTACK **stack,int stackMaxRoom);
void DestroyArrayStack(ARRAYSTACK **stack);
boolean IsArrayStackFull(ARRAYSTACK *head);
boolean IsArrayStackEmpty(ARRAYSTACK *head);
boolean PopArrayStackElement(ARRAYSTACK *head,USER_TYPE *vout);
boolean PushArrayStackElement(ARRAYSTACK *head,USER_TYPE vin);
boolean PushArrayStackElement(ARRAYSTACK *head,USER_TYPE vin)
{
boolean OK = TRUE;
if(IsArrayStackFull(head) == FALSE)
{
head->data[++head->stackTop] = vin;
}
else
{
OK = FALSE;
}
return OK;
}
boolean PopArrayStackElement(ARRAYSTACK *head,USER_TYPE *vout)
{
boolean OK = TRUE;
if(IsArrayStackEmpty(head) == FALSE)
{
(*vout) = head->data[head->stackTop--];
}
else
{
OK = FALSE;
}
return OK;
}
boolean IsArrayStackEmpty(ARRAYSTACK *head)
{
boolean OK = TRUE;
OK = (head->stackTop == STACK_BUTTOM);
return OK;
}
boolean IsArrayStackFull(ARRAYSTACK *head)
{
boolean OK = TRUE;
OK = (head->stackTop >= head->stackMaxRoom);
return OK;
}
void DestroyArrayStack(ARRAYSTACK **stack)
{
if((*stack) != NULL)
{
if((*stack)->data != NULL)
{
free((*stack)->data);
(*stack)->data = NULL;
}
free((*stack));
(*stack) = NULL;
}
}
boolean InitArrayStack(ARRAYSTACK **stack,int stackMaxRoom)
{
boolean OK = TRUE;
if((*stack) != NULL)
{
OK = FALSE;
}
else if(stackMaxRoom <= 0)
{
OK = FALSE;
}
else//(*stack)==NULL && stackMaxRoom > 0
{
(*stack) = (ARRAYSTACK *)malloc(sizeof(ARRAYSTACK));
if((*stack) != NULL)
{
(*stack)->data = (USER_TYPE *)malloc(sizeof(USER_TYPE)*stackMaxRoom);
if((*stack)->data != NULL)
{
(*stack)->stackTop = STACK_BUTTOM;
(*stack)->stackMaxRoom = stackMaxRoom;
}
else
{
OK = FALSE;
free(*stack);
(*stack) = NULL;
}
}
else
{
OK = FALSE;
}
}
return OK;
}
/*
void main(void)
{
ARRAYSTACK *stack = NULL;
USER_TYPE v1={12,20,"张鹏",23.4},v2={15,30,"张三",34.4},t1,t2;
int i;
InitArrayStack(&stack,10);
PushArrayStackElement(stack,v1);
PushArrayStackElement(stack,v2);
PopArrayStackElement(stack,&t1);
PopArrayStackElement(stack,&t2);
printf("%4d %4d %s %lf %s\n",t1.age,t1.clas,t1.name,t1.weight);
printf("%4d %4d %s %lf %s\n",t2.age,t2.clas,t2.name,t2.weight);
printf("%s空栈",(IsArrayStackEmpty(stack)) ? "是" : "不是");
DestroyArrayStack(&stack);
getch();
}
*/
#endif
0 0
- stack栈
- 栈 Stack
- STACK 栈
- 栈(stack)
- 栈 Stack
- 栈stack
- stack栈
- stack栈
- stack栈
- stack栈
- stack栈
- 栈(stack)
- stack栈
- 栈 stack
- 栈(Stack)
- 栈Stack
- stack 栈
- 栈《Stack》
- 我的第一个博客文章
- android:获取联系人原理(姓名和电话)详解
- CI框架源码完全分析之核心文件(输入类)Input.php
- IOS实现微信打飞机代码(带注释)
- 保护java程序 防止反编译
- stack栈
- Linux基本操作命令
- 2015微软编程之美挑战赛初赛第2场
- 黑马程序员——C语言知识点总结之预处理指令和typedef关键字
- 你所不知道的html5与html中的那些事(五)——web图像
- 《Python 源码剖析》一些理解以及勘误笔记(2)
- 第十二章 if Tests and Syntax Rules
- Java处理大文件
- java学习笔记(一)