简单顺序栈

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define MAXSIZE 20

typedef struct item {
	int index;
} Item;

typedef struct stack {
	Item arr[MAXSIZE];
	int index;
} Stack ;

//初始化栈 
bool initStack(Stack *s);

//入栈
bool push(Stack *s, Item *e);

//出栈
void pop(Stack *s, Item *e); 

//依此显示栈中的数据 
void StackTraverse(Stack *s);

//取得栈顶元素
bool getTop(Stack *s, Item *e); 

//判断栈是否为空
bool stackEmpty(Stack *s); 

//判断栈是否已满
bool stackFull(Stack *s); 
 
//把栈设置为空
bool ClearStack(Stack *s);
 
bool initStack(Stack *s){
	s->index = -1;
	return true;
}

bool push(Stack *s, Item *e){
	if(s->index == MAXSIZE - 1){
		fprintf(stderr,"栈空间已满.\n");
		exit(EXIT_FAILURE);
	}
	s->index++;
	s->arr[s->index] = *e;
	return true;
}

void pop(Stack *s, Item *e){
	if( stackEmpty(s) ){
		fprintf(stderr, "出栈错误,栈为空.\n");
		exit(EXIT_FAILURE);
	}
	*e = s->arr[s->index];
	s->index--;
}

void StackTraverse(Stack *s){
	int i = s->index;
	while(i >= 0){
		printf("%d ",s->arr[i].index);
		i--;
	}
}

bool getTop(Stack *s, Item *e){
	if(s->index < 0){
		fprintf(stderr, "操作失败,栈为空.");
		exit(EXIT_FAILURE); 
	}
	*e = s->arr[s->index];
	return true;
}

bool stackEmpty(Stack *s){
	if(s->index == -1){
		return true;
	}else{
		return false;
	}
}

bool stackFull(Stack *s){
	if(s->index == MAXSIZE - 1){
		return true;
	}else{
		return false;
	}
}

bool ClearStack(Stack *s){
	s->index = -1;
	return true; 
} 

int main(void){
	Stack s;
	if( !initStack(&s) ){
		fprintf(stderr, "初始化失败.\n");
		exit(EXIT_FAILURE); 
	}
	
	Item i = {
		i.index = 1
	};
	
	push(&s, &i);
/*	
	Item popItem;
	pop(&s, &popItem);
	printf("%d",popItem.index);
*/
/*
	StackTraverse(&s);
*/
	Item top;
	getTop(&s,&top);
	printf("%d",top.index);
	return 0;
} 

  

posted @ 2013-03-18 18:12  chapterlin  阅读(97)  评论(0)    收藏  举报