博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言数据结构-栈
阅读量:6428 次
发布时间:2019-06-23

本文共 3254 字,大约阅读时间需要 10 分钟。

一、栈的定义

栈(statck)这种在计算机中是相当出名的。栈中的数据是先进后出的(First In Last Out, FILO)。栈只有一个出口,允许新增元素(只能在栈顶上增加)、

移出元素(只能移出栈顶元素)、取得栈顶元素等操作。在STL中,栈是以别的容器作为底部结构,再将接口改变,使之符合栈的特性就可以了。

二、代码实现

1 //  main.c  2 //  C 语言-栈  3 //  4 //  Created by rimi on 2017/5/22.  5 //  Copyright © 2017年 rimi. All rights reserved.  6 //  7   8 #include 
9 #include
10 #include
11 struct Data{
//因为两个相邻之间的关系需要维护 12 int i; 13 struct Data * next; 14 15 }; 16 17 18 struct Stack{ 19 struct Data *pTop;//栈顶指针 20 struct Data *pBottom;//栈底指针 21 int maxNumber;//栈里面最多放几个元素 22 int currentNumber;//栈当前元素个数 23 24 }; 25 struct Data * newData();//初始化一个Date 26 struct Stack * initStack();//初始化一个栈 27 bool push(struct Stack * stack,struct Data *data);//压栈、进栈 28 void pop(struct Stack * stack);//出栈 29 void traverse(struct Stack * stack);//遍历栈里面的所有元素 30 bool isEmpty(struct Stack * stack); 31 bool isFull(struct Stack * stack); 32 33 int main(int argc, const char * argv[]) { 34 struct Stack * stack=initStack(5); 35 while (push(stack,newData() )){ 36 } 37 traverse(stack); 38 pop(stack); 39 pop(stack); 40 pop(stack); 41 traverse(stack); 42 return 0; 43 } 44 //初始化一个data 45 struct Data * newData(){ 46 struct Data * data=(struct Data *)malloc (sizeof(struct Data)); 47 data->next=NULL; 48 printf("请输入一个元素值(一个整数):"); 49 scanf("%d",&data->i); 50 return data; 51 52 } 53 //初始化一个栈 54 struct Stack * initStack(int max){ 55 struct Stack * stack=(struct Stack *)malloc (sizeof(struct Stack)); 56 stack->pTop=NULL; 57 stack->pBottom=NULL; 58 stack->maxNumber=max; 59 stack->currentNumber=0; 60 return stack; 61 62 } 63 //判断是否为满(为满返回true,不为满false) 64 bool isFull(struct Stack * stack){ 65 if(stack ->currentNumber ==stack->maxNumber) { 66 67 return true; 68 69 } 70 return false; 71 } 72 73 74 //压栈、进栈 75 bool push (struct Stack * stack,struct Data *data){ 76 if(isFull(stack)){ 77 printf("栈已满了"); 78 return false; 79 80 } 81 if(data ->i==-1){ 82 return false; 83 } 84 if(stack->pTop== NULL && stack ->pBottom ==NULL){ 85 86 stack ->pTop=data; 87 stack->pBottom=data; 88 }else{ 89 data->next=stack->pTop; 90 stack->pTop=data; 91 } 92 stack->currentNumber++; 93 return true; 94 } 95 //判断是否为空 96 bool isEmpty(struct Stack * stack){ 97 if(stack ->pBottom == NULL && stack ->pTop ==NULL) { 98 return true; 99 }100 return false;101 }102 103 104 105 //弹出栈顶元素106 void pop (struct Stack * stack){107 if(!isEmpty(stack)) {108 struct Data *data=(stack )->pTop;109 printf("元素:%d 出栈 \n",data->i);110 stack->pTop = stack ->pTop->next;111 free(data);112 113 }114 115 }116 //遍历打印栈中的元素117 void traverse (struct Stack *stack){118 printf("=================== \n");119 int index=0;120 struct Data * temp =stack ->pTop;121 while(temp !=NULL){122 printf("第%d个输出的元素是:%d \n",++index,temp->i);123 temp = temp->next;124 }125 printf("=================== \n");126 }

 

转载于:https://www.cnblogs.com/sbj-dawn/p/6906192.html

你可能感兴趣的文章
微信公众平台模拟群发技术
查看>>
C语言学习之指针详解
查看>>
学习使用Bing Maps Silverlight Control(一):准备和新建
查看>>
什么是Scrum
查看>>
nginx负载均衡的5种策略
查看>>
90%人都不知道:SVN 和 Git 的一些误解和真相
查看>>
防火墙配置十大任务之九,验证防火墙的运行
查看>>
【linux】浅谈Linux下的 find 指令
查看>>
CentOS 7 使用kubeadm 部署 Kubernetes
查看>>
我的友情链接
查看>>
透视美国大数据爆发全景
查看>>
java学习第一天1.2
查看>>
清空输入缓冲区的方法
查看>>
Yii2 项目优化小贴士
查看>>
UIScrollView的判断位置的属性如下:
查看>>
Applicatin Loader上传app步骤记录
查看>>
两种方法修改table表的内容
查看>>
张小龙莫慌 马化腾莫急 你们要好好的 微信还有时间
查看>>
一些常用软件静默安装参数(nsis,msi,InstallShield ,Inno)
查看>>
部署mimic版本的Ceph分布式存储系统
查看>>