<数据结构>顺序栈的C语言实现
2013-11-01 12:44
531 查看
栈的概念,想必来看这篇文章的,都应该是清楚的。栈是线性表的一个子集,限定了对于表的一些操作,仅能在表尾进行插入和删除操作。话不多说,直接给出自己写的源代码(仅供参考):
PS:程序简单实现,重在理解知识点,打牢基础。
"init.h":
"SequenceStack.h":
"SequenceStack.c":
"main.c":
运行结果如下:
与大家分享,共同学习,相互提高,如有疑问或建议,请留言。
PS:程序简单实现,重在理解知识点,打牢基础。
"init.h":
#ifndef _INIT_H #define _INIT_H #include<stdio.h> #include<stdlib.h> #define TRUE 1 #define FASLE 0 #define OK 1 #define ERROR -1 #define OVERFLOW -2 typedef int Status; typedef char SElemType; #endif
"SequenceStack.h":
#ifndef _SEQUENCESTACK_H #define _SEQUENCESTACK_H //定义顺序栈结构体 typedef struct { SElemType *base; //指向栈低,base=NULL表示栈销毁或不存在 SElemType *top; //指向栈顶 int stack_size; //栈的容量大小 }SqStack; //初始化栈 Status init_sq_stack(SqStack &S); //进栈 Status push(SqStack &S, SElemType e); //出栈 Status pop(SqStack &S,SElemType &e); //打印栈 Status display_sq_stack(SqStack S); #endif
"SequenceStack.c":
#include"init.h" #include"SequenceStack.h" #define SqStackSize 100 #define SqStackIncrement 30 //初始化栈 Status init_sq_stack(SqStack &S) { S.base = (SElemType *)malloc(SqStackSize * sizeof(SElemType)); //内存分配失败 if(!S.base) exit(OVERFLOW); S.top = S.base; S.stack_size = SqStackSize; return OK; } //进栈 Status push(SqStack &S, SElemType e) { if(S.top - S.base >= S.stack_size) { S.base = (SElemType *)realloc(S.base,(S.stack_size + SqStackIncrement)*sizeof(SElemType)); //内存分配失败 if(!S.base) exit(OVERFLOW); S.top = S.base + S.stack_size; S.stack_size += SqStackIncrement; } *S.top++ = e; return OK; } //出栈 Status pop(SqStack &S,SElemType &e) { if(S.top -S.base == 0) { printf("栈为空,不能出栈\n"); return ERROR; } e = *--S.top; return OK; } //打印栈 Status display_sq_stack(SqStack S) { if(NULL == S.base) { printf("栈不存在\n"); return ERROR; } SElemType *p; p = S.top; do { printf("%c ", *--p); }while(p != S.base); printf("\n"); return OK; }
"main.c":
#include"init.h" #include"SequenceStack.h" void test_sequence_stack() { SqStack S; init_sq_stack(S); push(S,'a'); push(S,'b'); push(S,'c'); printf("栈中的元素为:"); display_sq_stack(S); SElemType e; pop(S,e); printf("出栈的元素为:%c\n",e); } int main() { test_sequence_stack(); }
运行结果如下:
与大家分享,共同学习,相互提高,如有疑问或建议,请留言。
相关文章推荐
- <数据结构>顺序列表的C语言实现
- <数据结构>单链表的C语言实现
- <数据结构>链栈的C语言实现
- <数据结构>顺序表
- <数据结构>单链表元素按插入方法排序实现
- <数据结构>各种排序算法的实现与总结(一)
- <C语言 入栈顺序>为什么函数入栈顺序从右往左?
- <数据结构> 第二章 线性表之循环链表的代码粗实现
- <数据结构>二叉树的递归、非递归以及层次遍历算法C语言实现
- <二叉树 前中后 层序 非递归遍历 c语言实现>
- <八>RecycleView+CardView实现瀑布流(2、加载网络图片)
- <数据结构> 实验四 字符串和多维数组
- <编程之美> 1的数目 c代码实现
- <数据结构>栈的应用一:括号匹配检测
- <六>基于淘宝Fourinone实现分布式缓存指南和demo
- <ctype.h> C语言标准库
- <数据结构> 第二章 线性表 思维导图
- <Java Web学习初级阶段>表格实现简单的注册页面
- <监听器模式>在C++ 与 Java 之间实现的差异
- <笔试><面试>C/C++单链表(最综合)最全工程从建立到相关函数实现