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


栈                                                                      

栈的特点是先进后出,一张图简单介绍一下。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,一经查实,立即删除!

相关文章

win10系统开不了机

电脑装了双系统&#xff0c;从ubuntu切回win10系统后&#xff0c;win10系统开不了机&#xff0c;一直转圈&#xff0c;修复结果是什么C:\WINDOWS\System32\Logfiles\Srt\SrtTrail.txt问题&#xff0c;是了网上的常用方法都没成功。 最后我的解决方案&#xff1a;强制关机后开机…

Android SDK打包

2015年6月18日 14:38:49 星期四 eclipse: 1. 将写好的代码上传版本库 2. 删除 /bin/* 3. eclipse->project->clean... 4. 上一步自动生成 /bin/xx.jar 5. 复制/bin/xx.jar 到 /libs/xx.jar 6. 删除 /src/* 7. 连同demo和刚才的工程文件夹压缩给到对方(这样可以避免包命…

MySQL 5.7.11 重置root密码

1.修改/etc/my.conf&#xff0c;添加参数skip-grant-tables 2.重启mysql service mysqld stop service mysqld start 3.用root 直接登录 [rootbogon ~]# mysql -uroot Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server versio…

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文件复制进工程中。

Web网页布局的主要方式

一、静态布局&#xff08;static layout&#xff09; 即传统Web设计&#xff0c;网页上的所有元素的尺寸一律使用px作为单位。 1、布局特点 不管浏览器尺寸具体是多少&#xff0c;网页布局始终按照最初写代码时的布局来显示。常规的pc的网站都是静态&#xff08;定宽度&#xf…

HDU 3966 Aragorn's Story (树链点权剖分,成段修改单点查询)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid3966 树链剖分的模版&#xff0c;成段更新单点查询。熟悉线段树的成段更新的话就小case啦。 1 //树链剖分 边权修改 单点查询2 #include <iostream>3 #include <cstring>4 #include <algorithm&…

微信分享无响应的解决

微信分享无响应的解决 最近使用友盟的社会化分享&#xff0c;集成到程序中进行分享功能的开发。 可是一开始还是可以正常使用&#xff0c;今天突然发现微信分享&#xff08;好友分享和朋友圈分享&#xff09;均是点击没有响应&#xff0c;也就是点击后&#xff0c;没有任何回馈…

x64电脑连接x32共享打印机

下载64位打印机驱动到64位电脑&#xff0c;在连接32位共享打印机出错时出现在本地寻找相关inf文件&#xff0c;此时将64位打印机驱动解压(不在64位本地安装)并找到相应inf文件&#xff0c;载入即可连接成功。

HTML中的br标签讲解(菜鸟)

br标签&#xff1a;如何在HTML中换行&#xff1f;可以使用br标签 1.br标签作用&#xff1a;换行 2.br标签格式&#xff1a;<br/> 3.br标签的注意点&#xff1a; 3.1多个br标签可以连续使用&#xff0c;使用了多少个br标签就会换多少行 3.2由于HTML的作用就是用来给文本添…

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

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

安卓中bundle的使用

Bundle类用作携带数据&#xff0c;它类似于Map&#xff0c;用于存放key-value形式的值&#xff0c;相对于Map&#xff0c;它提供了各种常用类型的putXxx()/getXxx()方法&#xff0c;Bundle的内部实际上是使用了HashMap类型的变量来存放PutXxx()方法存入的值。 SDK里是这样描述&…

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

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

wds+mdt 分布式自动部署 操作系统

一、 安装准备 1、工具的准备 首先介绍本次项目所涉及到的内容&#xff1a; MDT Microsoft Deployment Toolkit 2012&#xff08;简称MDT 2012&#xff09;是微软最新一代部署工具&#xff0c;通过它可以自动完成桌面和服务器部署的推荐操作进程和工具&#xff0c;MDT主要…

iOS开发网络篇—数据缓存

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

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

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

Chrome浏览器设置小窗口视频

快捷工具先安装1.28版本后用1.31版本替换&#xff0c;以实现视频弹窗和双击关闭标签页功能。 首先下载Chrome扩展快捷工具1.28版的CRX安装包&#xff1a;http://pan.baidu.com/s/1pJ4T4td&#xff1b; 然后拖放到chrome扩展管理页面中安装。 接着&#xff0c;下载打包好的快捷…

这门课有什么用?

每个老师都苦恼于学生常问的问题&#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;但…