妙趣横生的算法--栈和队列


栈                                                                      

栈的特点是先进后出,一张图简单介绍一下。image

复制代码
#include "stdio.h"
#include "math.h"
#include "stdlib.h"
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10typedef  char ElemType;
typedef struct{ElemType *base;ElemType *top;int stacksize;
}sqStack;void initStack(sqStack *s)
{/*内存中开辟一段连续空间作为栈空间,首地址赋值给s->base*/s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));if(!s->base) exit(0);     /*分配空间失败*/s->top = s->base;       /*最开始,栈顶就是栈底*/s->stacksize = STACK_INIT_SIZE;   /*最大容量为STACK_INIT_SIZE */
}
void Push(sqStack *s, ElemType e){if(s->top - s->base >= s->stacksize){/*栈满,追加空间*/s->base = (ElemType *)realloc(s->base, (s->stacksize + STACKINCREMENT)*sizeof(ElemType));if(!s->base) exit(0);   /*存储分配失败*/s->top = s->base + s->stacksize;s->stacksize = s->stacksize + STACKINCREMENT; /*设置栈的最大容量*/}*(s->top) = e;  /*放入数据*/s->top++;
}void Pop(sqStack *s , ElemType *e){if(s->top == s->base) return;//栈里面没有元素了则返回
    *e = *--(s->top); //删除栈顶的元素    
}int StackLen(sqStack s){return (s.top - s.base) ;//计算栈的长度 
}
void main()
{ElemType c;sqStack s;int len , i , sum = 0;printf("Please input a Binary digit\n");initStack(&s);  /*创建一个栈,用来存放二进制字符串*//*输入0/1字符表示的二进制数,以#结束*/scanf("%c",&c);while(c!='#')//遇到#则结束{Push(&s,c);//输入一个压入一个scanf("%c",&c);}len = StackLen(s);  /*得到栈中的元素个数,即二进制数的长度*/for(i=0;i<len;i++){Pop(&s,&c);sum = (int)(sum + (c-48) * pow(2,i));  /*转换为十进制*/
        //二进制转十进制的算法 }printf("Decimal is %d\n",sum);
}
复制代码

队列                                                                  

队列的特点是先进先出,就跟我们平常排队一个意思。image

复制代码
#include "stdio.h"
#include "stdlib.h"
typedef char ElemType;
typedef struct QNode{ElemType data;struct QNode *next;
} QNode , *QueuePtr;
typedef struct{QueuePtr front;   //队头指针QueuePtr rear;    //队尾指针
}LinkQueue;void initQueue(LinkQueue *q){/*初始化一个空队列*/q->front = q->rear = (QueuePtr)malloc(sizeof(QNode)); /*创建一个头结点,队头队尾指针                                                                指向该结点*/if( !q->front) exit(0);     /*创建头结点失败*/q->front->next = NULL;     /*头结点指针域置NULL*/
}void EnQueue(LinkQueue *q, ElemType e){QueuePtr p;p = (QueuePtr)malloc(sizeof(QNode));  /*创建一个队列元素结点*/if( !q->front) exit(0);     /*创建头结点失败*/p->data = e;//元素节点写入数据p->next = NULL;//元素节点的向后的指针指向空
    q->rear ->next = p;//将队列中的队尾指针指向刚生成的元素节点q->rear = p;
}
void DeQueue(LinkQueue *q, ElemType *e){/*如果队列q不为空,删除q的队头元素,用e返回其值*/QueuePtr p;if(q->front == q->rear) return;  /*队列为空,返回*/p = q->front->next;//队头给p*e = p->data;//取出来的队头的数据
    q->front->next = p->next;//取出来的队头的下一个指向给新的队头的指向if(q->rear == p) q->rear = q->front;  /*如果队头就是队尾,则修改队尾指针*/free(p);
}
/*测试函数*/
void main()
{ElemType e;LinkQueue  q;initQueue(&q);           /*初始化一个队列q*/printf("Please input a string into a queue\n");scanf("%c",&e);while(e!='@'){EnQueue(&q,e);   /*向队列中输入字符串,以@表示结束*/ scanf("%c",&e);}printf("The string into the queue is\n");while(q.front != q.rear){   /*将队列中的元素出队列,并打印在屏幕上*/DeQueue(&q,&e);printf("%c",e);}printf("\n");
}
复制代码

 

 




本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3667093.html,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257164.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

resure挽救笔记本系统和一些相关的操作记录

使用fedora23很久了, 但是感觉不是很流畅, 出现了一些不太稳定的体验, 所以想改到centos7. 因为centos7的很多东西 跟 fedora23 很相近了. 所以应该是无缝过渡是选择32位的系统还是选择64位的系统?还是要使用 32位的 它是90%的人的选择使用, 是普通人的通用选择, 几乎支持linu…

2021-06-08

opencv无法读取mp4文件opencv读取mp4文件时&#xff0c;总是VideoCapture.isopen()返回0,即无法打开cap。解决方法&#xff0c;将opencv安装包的opencv_videoio_ffmpeg451_64文件复制进工程中。

Cocos2d-3.x版的HelloWorld工程分析 (二)

我们HelloWorld 从applicationDidFinishLaunching()后&#xff0c; 大部分人都会从这部分代码开始研究&#xff0c;如果想要研究main函数 如何调用applicationDidFinishLaunching() 传送门 http://blog.csdn.net/hiwoshixiaoyu/article/details/51472707 #include "App…

NO.1 python_人工智能_学习路线

***##学习路线&#xff1a;* 1.python基础 计算机组成原理、python开发环境、python变量、流程控制语句、文件操作、异常处理、模块与包、飞机大战游戏制作等 2.python高级应用 网络编程、并发编程、数据库编程、正则表达式、Linux系统应用、函数的高级应用、python的语法进阶…

iOS开发网络篇—数据缓存

iOS开发网络篇—数据缓存 一、关于同一个URL的多次请求 有时候&#xff0c;对同一个URL请求多次&#xff0c;返回的数据可能都是一样的&#xff0c;比如服务器上的某张图片&#xff0c;无论下载多少次&#xff0c;返回的数据都是一样的。 上面的情况会造成以下问题 &#xff08…

[WinError 10061] 由于目标计算机积极拒绝,无法连接错误解决办法

爬虫的时候会经常出现"[WinError 10061] 由于目标计算机积极拒绝&#xff0c;无法连接"错误这种情况&#xff0c;有可能是LAN口设置不正确 我是在爬取全国天气情况的时候出现的这种错误&#xff0c;后面调了以后可以了1.控制面板——网络和 Internet—— Internet选项…

这门课有什么用?

每个老师都苦恼于学生常问的问题&#xff1a;“某某课学了有什么用&#xff1f;”老师费劲巴拉解释一通&#xff0c;结果还是&#xff1a;然并卵。 一门课有什么用&#xff0c;很难解释得令人信服&#xff0c;因为这和人的认知水平有关。认知水平达不到&#xff0c;解释的多深入…

NO.1_python_scrapy组成爬取多页数据连接数据库配置文件书写

scrapy框架组成及各部分作用 item pipelines: 用于存放需要存储数据的数据模型&#xff0c;一般格式为&#xff1a; #需要存储多少中类型的数据就写多少行&#xff0c;一般是key_value组合 数据名称&#xff0c;即key scrapy.Field()spiders 用于解析返回来的response im…

“智云大咖秀”:大咖摄影师谈惊艳亮相的“大咖级”设备

古人云&#xff0c;善书者不择笔。 古人又云&#xff0c;工欲善其事必先利其器。 古人很矛盾。 这两句话如果用在影像创作这个领域&#xff0c;可以说都有道理&#xff1a;没有好的设备&#xff0c;创意大师一样能够拍出足够惊艳的作品&#xff1b;有足够强的设备&#xff0c;但…

Cobub无码埋点关键技术的实现

随着大数据时代的到来&#xff0c;数据采集也已经变的越来越重要。前端埋点作为一个比较成熟的数据接入手段被广泛应用着。目前埋点分为两种方式&#xff0c;有码与无码埋点。有码埋点比较容易理解&#xff0c;即调用SDK的API&#xff0c;在代码中插入埋点的相关代码&#xff0…

Dedesql数据库类详解(二次开发必备教程)(转)

http://www.dedecms.com/help/development/2009/1028/1076.html 织梦DedeCMS的二次开发不仅仅是会写写织梦的标签&#xff0c;会制作织梦的模板。很多时候&#xff0c;我们需要对织梦DedeCMS的数据库进行查询、插入、删除等等之类的操作&#xff0c;进行这一类的操作之前&#…

留言板

本软件是作为部门内员工之间留言及发送消息使用。 系统必须通过口令验证&#xff0c;登录进入。方法是从数据库内取出用户姓名和口令的数据进行校验。 系统包含四部分功能 1 登录&#xff1a;验证用户名与口令&#xff0c;保存会话信息&#xff0c;进入主界面。 界面显示代码 &…

2017-2018-1 20155301 《信息安全系统设计基础》第7周学习总结

2017-2018-1 20155301 《信息安全系统设计基础》第7周学习总结 教材学习内容总结 作为我们处理器实现的运行实例&#xff0c;因为受x86-64指令集的启发&#xff0c;它被俗称为“x86”&#xff0c;所以我们称我们的指令集为“Y86-64”&#xff0c;与“x86-64”相比&#xff0c;Y…

Dubbo原理解析-监控

Dubbo发布代码中&#xff0c;自带了一个简易的监控中心实现。对于一般的小业务这个监控中心应该能够满足需求&#xff0c;对于那些大业务量的大公司一般都会有自己的监控中心&#xff0c;更加丰富的功能如常用的报警短信通知等等。这章讲解分析使得读者能够了解一般的监控中心实…

学习笔记(04):Python网络编程并发编程-什么是socket

立即学习:https://edu.csdn.net/course/play/24458/296233?utm_sourceblogtoedu 1.什么是网络编程&#xff1f; 答&#xff1a;网络编程也叫做socket编程即套接字编程&#xff0c;基于遵循socket套接字的规定进行的编程 2.什么是socket&#xff1f; 答&#xff1a;socket就是…

JeeSite 4.0 说说前端的那些事

2019独角兽企业重金招聘Python工程师标准>>> 引言 一个不得不说的话题&#xff0c;经过近几年的发展&#xff0c;Web前端开发已经不是一个新有的岗位了&#xff0c;前端技术发展非常迅速&#xff0c;技术更新换代也很快&#xff0c;对于前端工程师来说是一个很大的挑…

程序包com.sun.istack.internal不存在

添加一下依赖 <!-- https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-impl --><dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.2.11</version></dependency&…

iOS微博项目(七)发微博和定位

class a导入class b&#xff0c;class b导入class a 会出现错误 如果keyboard不显示&#xff0c;应该是hardware-》connect选择了 1. 发微博UI 2.定位 一直不回调&#xff0c;后来发现是ios8后方法更新了&#xff1a;http://blog.devzeng.com/blog/ios8-corelocation-framework…

设计模式之UML类图

在学设计模式的过程中经常碰到各式各样的UML类图。那些眼花缭乱的符号有什么含义呢&#xff1f; 类图含义 类图中的关系 从网上找来一张图作为实例 依赖关系&#xff1a;比如动物依赖氧气和水&#xff0c;这里如学生要依赖自行车。用虚线箭头表示。关联关系&#xff1a;学生和身…

tomcat启动报:No Spring WebApplicationInitializer types detected on classpath

2019独角兽企业重金招聘Python工程师标准>>> 对于maven项目&#xff0c;tomcat启动不加载spring配置文件&#xff0c;是因为找不到web.xml文件 右键项目properties 选择 Deployment Assembly 编辑 Web Deployment Assembly&#xff0c;注意主要是红色线框中的路径 …