复习数据结构之栈
来源:互联网 发布:编写c语言的软件 编辑:程序博客网 时间:2024/05/16 09:08
栈是最重要的数据结构之一,所以的函数调用都要用到它,只不过是系统在管理,并且栈在解决实际问题中也很重要。下面贴出常见的对栈的操作。
#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <assert.h>#define STACKSIZE 3#define OK 1#define NOK 0typedef int dataType;typedef int status;typedef struct stack* stackPtr;struct stack{ dataType *base; int top; int size;};/**************function****************/status initializeStack(stackPtr dataStack){ assert(dataStack); dataStack->base = (dataType*)malloc((sizeof(dataType) * STACKSIZE)); assert(dataStack->base); dataStack->top = 0; dataStack->size = STACKSIZE; return OK;}status destroyStack(stackPtr dataStack){ assert(dataStack); assert(dataStack->base); free(dataStack->base); dataStack->base = NULL;printf("the stack is destroied\n");printf("(- _ -)\n"); return OK;}status clearStack(stackPtr dataStack){ assert(dataStack); assert(dataStack->base); dataStack->top = 0; return OK;}status isEmptyStack(stackPtr dataStack){ assert(dataStack); assert(dataStack->base); return ((0 == dataStack->top) ? OK : NOK);}status isFullStack(stackPtr dataStack){ assert(dataStack); assert(dataStack->base); return ((dataStack->size== dataStack->top) ? OK : NOK);}int lengthStack(stackPtr dataStack){ assert(dataStack); assert(dataStack->base); return dataStack->top;}status getTopNumber(stackPtr dataStack, dataType *dataOutput){ assert(dataStack); assert(dataStack->base); assert(dataOutput); int temp = dataStack->top - 1; *dataOutput = (dataStack->base)[temp]; return OK;}status pushStack(stackPtr dataStack, dataType dataInput){ assert(dataStack); assert(dataStack->base); if(isFullStack(dataStack)) { printf(" the stack is full in pushStack\n"); return -1; } (dataStack->base)[dataStack->top++] = dataInput; return OK;}status popStack(stackPtr dataStack, dataType *dataOutput){ assert(dataStack); assert(dataStack->base); assert(dataOutput); if(isEmptyStack(dataStack)) { printf(" the stack is null in popStack\n"); return -1; } *dataOutput = (dataStack->base)[--dataStack->top]; return OK;}status traversalStack(stackPtr dataStack){ assert(dataStack); assert(dataStack->base); int index = 0; while(index < dataStack->top) { printf("%d ", dataStack->base[index]); index++; } printf("\n"); return OK;}int main(void){ struct stack stackInMain;dataType output;int length; if(OK != initializeStack(&stackInMain)) { printf("error for function initializeStack in main\n"); return -1; } if(OK != isEmptyStack(&stackInMain)) { printf("the stack is not empty in main\n"); } else { printf("the stack is empty\n"); } if(OK != pushStack(&stackInMain, 10)) { printf("error for function pushStack in main\n"); return -1; } if(OK != isEmptyStack(&stackInMain)) { printf("the stack is not empty in main\n"); } else { printf("the stack is empty\n"); }if(OK == getTopNumber(&stackInMain, &output)) { printf("output[%d]\n",output); } if(OK != clearStack(&stackInMain)) { printf("error for function clearStack in main\n"); return -1; } if(OK != isEmptyStack(&stackInMain)) { printf("the stack is not empty in main\n"); } else { printf("the stack is empty\n"); } if(OK != pushStack(&stackInMain, 8)) { printf("error for function pushStack in main\n"); return -1; } if(OK != pushStack(&stackInMain, 6)) { printf("error for function pushStack in main\n"); return -1; } if(OK != pushStack(&stackInMain, 4)) { printf("error for function pushStack in main\n"); return -1; } if(OK != isFullStack(&stackInMain)) { printf("the stack is not full in main\n"); } else { printf("the stack is full\n"); }length = lengthStack(&stackInMain);printf("length[%d]\n",length); if(OK != traversalStack(&stackInMain)) { printf("error for function traversalStack in main\n"); return -1; } if(OK != destroyStack(&stackInMain)) { printf("error for function destroyStack in main\n"); return -1; } if(OK != pushStack(&stackInMain, 12)) { printf("error for function pushStack in main\n"); return -1; } return 0;}
- 数据结构复习之【栈】
- 复习数据结构之栈
- 数据结构之【栈】--复习
- 复习-数据结构之栈和队列
- 数据结构复习之堆
- 数据结构复习之【树】
- 数据结构复习之【排序】
- 数据结构复习之【队列】
- 数据结构复习之【图】
- 复习数据结构之队列
- 数据结构复习之【排序】
- 数据结构复习之【图】
- 数据结构复习之【排序】
- 数据结构之【队列】--复习
- 数据结构之【树】--复习
- 数据结构复习之串
- 数据结构之【排序】--复习
- 《数据结构》复习之图
- 简单的用repo获取android的源代码
- windows下vs2010 编译、使用boost
- java垃圾回收机制
- 高精度减法
- 跟我一起写 Makefile 转载
- 复习数据结构之栈
- 关于opencv在VC6.0中的配置
- linux文件tar.xz解压方法
- 千与千寻django(三)---django的模板系统
- 黑马程序员_交通灯系统(7K面试题)
- Android自定义抓包调用其它应用程序
- 在WinXP镜像中手工集成sata驱动。
- spring的事务传播行为和隔离级别
- WinCE驱动程序的分类