2008.09.10数据结构学习笔记
来源:互联网 发布:pplive网络电视直播 编辑:程序博客网 时间:2024/05/20 06:22
/*inc.h*/
#ifndef _INC_H_
#define _INC_H_
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW (-2)
/*Status是函数的类型,其值是函数结果的状态码*/
typedef int Status;
#endif /*End of _INC_H_*/
#include "inc.h"
#include <malloc.h>
#include <stdlib.h> /*include exit()*/
/*========ADT Stack的表示与实现===========*/
/*------------栈的顺序存储表示------------*/
#define STACK_INIT_SIZE 100 /*存储空间初始分配量*/
#define STACK_INCREMENT 10 /*存储空间分配增量 */
#define SElemType int
typedef struct
{
SElemType *base; /*在栈构造之前和销毁之后,base的值为NULL*/
SElemType *top; /*栈顶指针*/
int stacksize; /*当前已分配的存储空间,以元素为单位*/
}SqStack;
/*---------基本操作的函数原型说明--------*/
Status InitStack (SqStack *S); /*构造一个空栈*/
Status DestroyStack (SqStack *S); /*销毁栈S,S不再存在*/
Status ClearStack (SqStack *S); /*把栈S置为空*/
Status StackEmpty (SqStack S); /*若栈为空,返回TRUE,否则返回FLASE*/
int StackLength (SqStack S); /*返回S的元素个数,即栈的长度*/
Status GetTop (SqStack S, SElemType *e); /*若栈不为空,则用e返回S的栈顶元素*/
Status Push (SqStack *S, SElemType e); /*插入元素e为新的栈顶元素*/
Status Pop (SqStack *S, SElemType *e); /*若栈不为空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR*/
Status StackTraverse(SqStack S, Status (*visit)(SqStack S)); /*从栈底到栈顶依次对栈中每个元素调用函数visit(),一旦visit()失败,则操作失败*/
/*---------基本操作的算法描述--------*/
Status InitStack(SqStack *S)
{
/*构造一个空栈*/
S->base = (SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S->base)
exit(OVERFLOW);
S->top = S->base;
S->stacksize = STACK_INIT_SIZE;
return OK;
}
Status ClearStack(SqStack *S)
{
/*把栈S置为空*/
if(S->top != S->base)
S->top = S->base;
return OK;
}
Status GetTop(SqStack S, SElemType *e)
{
/*若栈不为空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR*/
if(S.top == S.base)
return ERROR;
*e = *(S.top-1);
return OK;
}
Status Push(SqStack *S, SElemType e)
{
/*插入元素e为新的栈顶元素*/
if((S->top-S->base) >= S->stacksize)
{
/*栈满,追加存储空间*/
S->base = (SElemType*)realloc(S->base,(S->stacksize+STACK_INCREMENT)*sizeof(SElemType));
if(!S->base)
exit(OVERFLOW);
S->top = S->base+S->stacksize;
S->stacksize += STACK_INCREMENT;
}
*S->top++ = e;
return OK;
}
Status Pop(SqStack *S, SElemType *e)
{
/*若栈不为空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR*/
if(S->top == S->base)
exit(OVERFLOW);
*e = *(--S->top);
return OK;
}
Status StackTraverse(SqStack S, Status (*visit)(SqStack S))
{
if(S.top == S.base)
return ERROR;
visit(S);
return OK;
}
//main.c
#include "SqStack.h"
#include <stdio.h>
void main(void)
{
Status visit_print(SqStack S);
void showInput();
void LineEdit();
LineEdit();
return;
}
void showInput()
{
printf("root>");
}
void LineEdit()
{
/*利用字符栈S,从终端接收一行并传送到调用过程的数据区*/
char ch;
SElemType c;
SqStack S={NULL,NULL,0};
InitStack(&S); /*栈造一个空栈*/
showInput();
ch = getchar();
while(ch!=0x21)
{
while(ch!='q' && ch!='/n')
{
switch(ch)
{
case '#':
Pop(&S,&c); /*仅当栈非空时退栈*/
break;
case '@':
ClearStack(&S); /*重置S为空栈*/
break;
default:
Push(&S,ch); /*有效字符进栈,未考虑栈满情形*/
break;
}
ch = getchar(); /*从端终接收下一个字符*/
}
/*将从栈底到栈顶的栈内字符传送到调用过程的数据区*/
StackTraverse(S,visit_print);
ClearStack(&S); /*重置S为空栈*/
showInput();
if(ch!=EOF) ch = getchar();
}
}
Status visit_print(SqStack S)
{
SElemType *pCur = S.base;
while(pCur != S.top)
{
printf("%c",*(pCur++));
}
printf("/n");
return OK;
}
- 2008.09.10数据结构学习笔记
- 学习 严蔚敏讲数据结构笔记10
- 《大话数据结构》--学习笔记10 ***重点***
- opencv学习笔记[10]:IplImage数据结构
- 【学习笔记----数据结构10-二叉树】
- 数据结构学习笔记
- 数据结构学习笔记(一)
- 数据结构学习笔记--前言
- 数据结构学习笔记--迷宫
- 数据结构学习笔记
- Java数据结构 学习笔记
- 数据结构学习笔记
- 数据结构学习笔记
- 数据结构学习笔记
- 数据结构学习笔记1
- 数据结构学习笔记一
- 数据结构学习笔记二
- 数据结构学习笔记三
- 关闭计算机
- sql Server 索引优化
- 使STL sort对Log进行排序
- 创建快捷方式
- only for test purpose
- 2008.09.10数据结构学习笔记
- 选择目录
- phpmyadmin配置
- 通过网络复制文件
- 图像反色
- 123
- JavaScript加密解密7种方法
- 灰度图像转换为彩色
- 基本预防asp中木马的方法