#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#define MAX_SIZE 20
/*
* 使用ADT实现栈模型的出栈和入栈
* 函数中返回值 -1 表示失败, 0 表示成功
*
*/
typedef struct NODE {
int data;
struct NODE *pre;
}*Node;
typedef struct STACK {
int size;
struct NODE *top;
}*Stack;
Stack CreatEmptyStack()
{
Stack stack = NULL;
stack = (Stack)malloc(sizeof(struct STACK));
if(stack == NULL){
printf("malloc mem error !\n");
exit(-1);
}
stack->top = NULL;
stack->size = 0;
return stack;
}
int isStackEmpty(Stack stack)
{
assert(stack!=NULL);
return (stack->top ==NULL);
}
int isStackFull(Stack stack)
{
assert(stack!=NULL);
return (stack->size >= MAX_SIZE);
}
int Push(Stack stack,int data)
{
assert(stack!=NULL);
Node p = NULL;
if(isStackFull(stack)){
printf("The stack is full ! \n");
return -1;
}
p = (Node)malloc(sizeof(struct NODE));
if(p == NULL)
{
printf("push malloc mem error !\n");
return -1;
}
p->data = data;
p->pre = NULL;
p->pre = stack->top;
stack->top = p;
(stack->size) ++;
return 0;
}
int Pop(Stack stack , int* data)
{
assert(stack!=NULL && data != NULL);
if(isStackEmpty(stack) == 1){
printf("The stack is empty!\n");
return -1;
}
Node p ;
p = stack->top;
*data = p->data;
stack->top = p->pre;
(stack->size) --;
free(p);
p = NULL;
return 0;
}
int getTop(Stack stack,int *data)
{
assert(stack!=NULL && data != NULL);
if(isStackEmpty(stack)==1){
printf("The stack is empty!\n");
return -1;
}
*data = stack->top->data;
return 0;
}
void printStack(Stack stack)
{
assert(stack!=NULL);
if(isStackEmpty(stack)==1){
printf("The stack is empty!\n");
return ;
}
Node p = stack->top;
while(p!=NULL){
printf(" %d ",p->data);
p = p->pre;
}
printf("\n");
}
void destory(Stack stack)
{
assert(stack!=NULL);
Node p,q;
if(isStackEmpty(stack)!=1){
p = q = stack->top;
while(p != NULL){
q = p->pre;
free(p);
p = q;
}
}
free(stack);
return ;
}
int main(int argc ,char *argv[])
{
printf("Enter hash main !\n");
Stack stack = NULL;
int i,data,ret;
stack = CreatEmptyStack();
for(i=0;i<50;i++){
Push(stack,i*5);
}
ret = getTop(stack,&data);
if(ret == -1){
printf("get data error !\n");
}else{
printf("get top data %d \n",data);
}
ret = Pop(stack ,&data);
if(ret == -1){
printf("get data error !\n");
}else{
printf("pop top data %d \n",data);
}
printStack(stack);
}
目的很明显,给自己做一个记录,代码在ubuntu上编译通过。代码中会有一些我没有考虑到的内容,请指出,