C 基础数据结构---栈 ADT

来源:互联网 发布:数据库系统全书第二版 编辑:程序博客网 时间:2024/04/29 08:41

#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上编译通过。代码中会有一些我没有考虑到的内容,请指出,


0 0