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
- C 基础数据结构---栈 ADT
- C 基础数据结构---队列 ADT
- C 基础数据结构---散列表(Hash) ADT
- 数据结构 -- 栈ADT
- 【数据结构】回顾栈ADT和队ADT
- 数据结构与算法 -- 栈 ADT
- 数据结构c语言基础
- C数据结构基础
- 数据结构(二)之栈ADT
- 数据结构(scheme) -- 抽象数据类型(ADT) -- 栈
- 数据结构-->栈的顺序实现 ADT
- 数据结构与算法---栈与ADT
- 数据结构C语言实现——ADT Triplet
- 数据结构:顺序表的ADT(C语言描述)
- 数据结构 成绩表的ADT
- <数据结构> ADT例子
- 数据结构 成绩表的ADT
- 【数据结构】回顾表ADT
- 利用Eclipse开发Linux驱动
- php中的静态变量
- SAP FI报表
- [javascript] iframe高度调整(随时自适应)(iframe加载ajax的chart图)
- iframe高度自适应,全屏,大小伸缩,有滚动条
- C 基础数据结构---栈 ADT
- Rescape:别人将玩家带进虚拟,我们将虚拟带出现实
- 第九章 类目、延展、协议
- 视觉直观感受7种常用的排序算法
- 用gflags的好处
- 带技术团队之大忌
- bean注入方式
- easyui form表单提交自定义验证数据是否已存在
- Struts2学习笔记(2)——Struts2基本配置