数据结构_3:栈:C语言
2016-01-10 14:53
471 查看
顺序栈
代码来自:大话数据结构
数据结构
#define MAXSIZE 20 /* 存储空间初始分配量 */ typedef int Status; typedef int SElemType; /* SElemType类型根据实际情况而定,这里假设为int */ /* 顺序栈结构 */ typedef struct { SElemType data[MAXSIZE]; int top; /* 用于栈顶指针 */ }SqStack;
基本操作
/* 返回S的元素个数,即栈的长度 */ int StackLength(SqStack S) { return S.top+1; } /* 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR */ Status GetTop(SqStack S,SElemType *e) { if (S.top==-1) return ERROR; else *e=S.data[S.top]; return OK; } /* 插入元素e为新的栈顶元素 */ Status Push(SqStack *S,SElemType e) { if(S->top == MAXSIZE -1) /* 栈满 */ { return ERROR; } S->top++; /* 栈顶指针增加一 */ S->data[S->top]=e; /* 将新插入元素赋值给栈顶空间 */ return OK; } /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */ Status Pop(SqStack *S,SElemType *e) { if(S->top==-1) return ERROR; *e=S->data[S->top]; /* 将要删除的栈顶元素赋值给e */ S->top--; /* 栈顶指针减一 */ return OK; }
测试
int main() { int j; SqStack s; int e; if(InitStack(&s)==OK) for(j=1;j<=10;j++) Push(&s,j); printf("栈中元素依次为:"); StackTraverse(s); Pop(&s,&e); printf("弹出的栈顶元素 e=%d\n",e); printf("栈空否:%d(1:空 0:否)\n",StackEmpty(s)); GetTop(s,&e); printf("栈顶元素 e=%d 栈的长度为%d\n",e,StackLength(s)); ClearStack(&s); printf("清空栈后,栈空否:%d(1:空 0:否)\n",StackEmpty(s)); return 0; }
共享栈
数据结构typedef int Status; typedef int SElemType; /* SElemType类型根据实际情况而定,这里假设为int */ /* 两栈共享空间结构 */ typedef struct { SElemType data[MAXSIZE]; int top1; /* 栈1栈顶指针 */ int top2; /* 栈2栈顶指针 */ }SqDoubleStack;
操作
/* 返回S的元素个数,即栈的长度 */ int StackLength(SqDoubleStack S) { return (S.top1+1)+(MAXSIZE-S.top2); } /* 插入元素e为新的栈顶元素 */ Status Push(SqDoubleStack *S,SElemType e,int stackNumber) { if (S->top1+1==S->top2) /* 栈已满,不能再push新元素了 */ return ERROR; if (stackNumber==1) /* 栈1有元素进栈 */ S->data[++S->top1]=e; /* 若是栈1则先top1+1后给数组元素赋值。 */ else if (stackNumber==2) /* 栈2有元素进栈 */ S->data[--S->top2]=e; /* 若是栈2则先top2-1后给数组元素赋值。 */ return OK; } /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */ Status Pop(SqDoubleStack *S,SElemType *e,int stackNumber) { if (stackNumber==1) { if (S->top1==-1) return ERROR; /* 说明栈1已经是空栈,溢出 */ *e=S->data[S->top1--]; /* 将栈1的栈顶元素出栈 */ } else if (stackNumber==2) { if (S->top2==MAXSIZE) return ERROR; /* 说明栈2已经是空栈,溢出 */ *e=S->data[S->top2++]; /* 将栈2的栈顶元素出栈 */ } return OK; }
递归
相关文章推荐
- 数据结构之二叉树总结
- 数据结构和算法笔记
- 数据结构学习笔记——栈及其应用
- 数据结构之散列表总结
- Huffman编码与译码
- 常用排序算法性能分析
- Lighttpd1.4.20源码分析 笔记 数据结构的组织
- 归并排序思路及算法实现
- 数据结构学习笔记——顺序表和链表的比较
- C语言数据结构——栈
- vector<KeyPoint> vecKeyPoints 的数据结构
- 13 给定的出栈序列是否满足入栈序列
- 数据结构-赫夫曼树
- 12 蛇形打印矩阵中的数据
- 数据结构学习笔记——其它链表
- 二叉树的非递归遍历
- 数据结构-String、char
- 【Java】Java数据结构和算法(一)
- 数据结构与算法——二叉堆
- 2015年大二上-数据结构-树和二叉树-2-(5)哈夫曼编码