数据结构-顺序栈-C语言实现
2014-08-11 15:29
204 查看
头文件 : stack.h
实现代码:
1,若栈的元素是基本数据类型,请打开stack.h
将第17行的typedef int SElemType;中的int改成相对应的数据类型。
2.若栈的元素不是基本数据类型,而是结构体类型,可执行下面两种操作:
(1).将该结构体定义放在stack.h中的SqStack结构体前面,并用typedef name SElemType; 重命名结构体
(2).用#include语句将含有结构体元素的头文件包含进来,并用typedef name SElemType; 重命名结构体
如
struct A{
int c;
};
typedef struct A SElemType;
#ifndef STACK_H #define STACK_H #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int Status; #define STACK_INIT_SIZE 100 // 存储空间初始分配量 #define STACKINCREMENT 10 // 存储空间分配增量 typedef int SElemType; // 初始化SElemType类型 typedef struct { SElemType *base; // 在栈构造之前和销毁之后,base的值为NULL SElemType *top; // 栈顶指针 int stacksize; // 当前已分配的存储空间,以元素为单位 }SqStack; // ------ 基本操作的函数原型说明 ------ // 构造一个空栈S Status InitStack( SqStack *S ); // 销毁栈S,S不再存在 Status DestroyStack( SqStack *S ); // 把S置为空栈 Status ClearStack( SqStack *S ); // 若栈S为空栈,则返回TRUE,否则返回FALSE Status StackEmpty( SqStack S ); // 返回S的元素个数,即栈的长度 int StackLength( SqStack S ); // 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR Status GetTop( SqStack S, SElemType *e ); // 插入元素e为新的栈顶元素 Status Push( SqStack *S, SElemType e ); // 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR Status Pop( SqStack *S, SElemType *e ); // 从栈底到栈顶依次对栈中的每个元素调用函数visit().一旦visit()失败,则操作失败 Status StackTraverse( SqStack S, Status (*visit)()); #endif
实现代码:
#include "stack.h" #include <stdio.h> #include <stdlib.h> // ------ 基本操作的算法描述------ // 构造一个空栈S Status InitStack( SqStack *S ) { S->base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType)); if ( !S->base ) exit(0); S->top = S->base; S->stacksize = STACK_INIT_SIZE; return OK; }// InitStack // 销毁栈S,S不再存在 Status DestroyStack( SqStack *S ) { if ( !S->base ) return ERROR; free( S->base ); S->base = NULL; return OK; } // 把S置为空栈 Status ClearStack( SqStack *S ) { if ( !S->base ) return ERROR; S->top = S->base; return OK; } // 若栈S为空栈,则返回TRUE,否则返回FALSE Status StackEmpty( SqStack S ) { if (S.base == S.top) return TRUE; return FALSE; } // 返回S的元素个数,即栈的长度 int StackLength( SqStack S ) { return S.top - S.base; } // 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR Status GetTop( SqStack S, SElemType *e ) { if (StackEmpty(S)) return ERROR; *e = *(S.top - 1); return OK; } // 插入元素e为新的栈顶元素 Status Push( SqStack *S, SElemType e ) { if ( S->top - S->base >= S->stacksize ) { // 栈满,追加存储空间 S->base = (SElemType *)realloc( S->base, (S->stacksize + STACKINCREMENT) * sizeof(SElemType)); if (!S->base) exit(0); // 内存分配失败 S->top = S->base + S->stacksize; S->stacksize += STACKINCREMENT; } *S->top = e; S->top++; return OK; } // 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR Status Pop( SqStack *S, SElemType *e ) { if (StackEmpty(*S)) return ERROR; S->top--; *e = *S->top; return OK; } // 从栈底到栈顶依次对栈中的每个元素调用函数visit().一旦visit()失败,则操作失败 Status StackTraverse( SqStack S, Status (*visit)()) { SElemType *ptr = S.base; while( ptr <= S.top ) { if (!visit()) exit(0); ptr++; } return OK; }
1,若栈的元素是基本数据类型,请打开stack.h
将第17行的typedef int SElemType;中的int改成相对应的数据类型。
2.若栈的元素不是基本数据类型,而是结构体类型,可执行下面两种操作:
(1).将该结构体定义放在stack.h中的SqStack结构体前面,并用typedef name SElemType; 重命名结构体
(2).用#include语句将含有结构体元素的头文件包含进来,并用typedef name SElemType; 重命名结构体
如
struct A{
int c;
};
typedef struct A SElemType;
相关文章推荐
- (C语言)单链表的顺序实现(数据结构一)
- 【数据结构】C语言实现顺序链表
- 数据结构 c语言实现顺序队列(输数字入队,字符出队)
- 数据结构学习笔记-栈的顺序存储(C语言实现)
- 数据结构 - 线性表(顺序表)C语言代码实现-处理整型数据(附详细解释)。 _清风明月
- (C语言队列的顺序实现(数据结构十)
- 数据结构 顺序表的实现(C语言)
- 数据结构 c语言 顺序查找算法(linux下实现)
- [数据结构]c语言实现顺序栈的入栈,出栈,清空,销毁等操作
- 数据结构学习笔记-线性表顺序存储(C语言实现)
- (C语言)串定长顺序存储实现(数据结构十二)
- C语言实现数据结构中的顺序栈
- 【数据结构】实现顺序表(c语言)
- C语言数据结构-顺序队列-数组实现
- C语言数据结构之:顺序表的实现
- (C语言)串定长顺序存储实现(数据结构十二)
- 【数据结构】用C语言实现顺序表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)
- 数据结构 查找及排序算法、直接插入排序及顺序查找(c语言实现)
- 数据结构--顺序栈的实现(C语言)
- C语言数据结构之顺序数组的实现