写在前面:在家玩了好久,实在是不知道干嘛了,突然想找些事做,现在是时候做些什么了。这些东西不见得多高深,也可能很简单,但很基础,也无法忽视。同时,也是自己学习走过的一条路。

这是开头,就写写C的队列和栈的一些算法吧。

首先是栈的一些基础功能的实现,先贴代码:

#include<stdlib.h>
#include<stdio.h>
typedef int SElemType; //声明栈元素类型为int
typedef int Status; //函数返回值的类型为int
#define MAXSIZE 20 //栈的容量 typedef struct
{
SElemType data[MAXSIZE];
int top;
}SqStock ; Status InitStock(SqStock *); //栈初始化函数声明
Status push(SqStock *,SElemType); //入栈函数声明
Status pop(SqStock *,SElemType *); //出栈函数声明
void Conversion(); //这是当时测验的一个转换函数,顺带贴了 /************函数区*******/
//0.初始化
Status InitStock(SqStock *s){
int StockDataArray[MAXSIZE];
for(int i=;i<MAXSIZE;i++){
s->data[i]='\0';
}
s->top=-;
return ;
} //入栈
Status push(SqStock *s,SElemType e){
if(s->top==MAXSIZE-){ //已达最大容量
return ;
};
s->top++;
s->data[s->top]=e;
return ; } //出栈
Status pop(SqStock *s,SElemType *e){
if(s->top==-){//已到栈底
return ;
}
*e=s->data[s->top--];
return ;
} //转化为8进制
void Conversion(){
int N;
SqStock *s;
s=(SqStock *)malloc( sizeof( SqStock)); //申请内存空间
InitStock(s);
printf("请输入一个十进制整数:");
scanf("%d",&N);
while(N){ push(s,N%);
N=N/;
}
int e;
while(s->top!=-){
pop(s,&e);
printf("%d",e);
}
}
/************函数区*******/

上述代码思路:利用数组来实现栈的功能,平时用的时候完全直接使用数组和一个int型的top,其值为当前栈顶元素所在的下标。至于如何处理栈溢出的问题,要么将容量设置大一点,要么在快要溢出的时候动态申请一些内存空间。当然,肯定还有其他的方法,自己要有探索精神哦。

接着是队列的一些基本功能的算法:

 #include <stdio.h>
#include <tchar.h>
#include<stdlib.h>
#include<math.h>
#include<time.h> #define MAXSIZE 20 typedef int QElemType;
typedef int Status;
//使用循环队列
typedef struct { QElemType Data[MAXSIZE];
int front;
int rear;
}XHQueue; int getRand(int ,int );//当时测试随机数的,两个变量是上下限
void InitQueue(XHQueue *); //初始化队列
Status EnQueue(XHQueue *,QElemType ); //入队
Status DeQueue(XHQueue *,QElemType *);//出队
Status IsEmpty(XHQueue *); //判断是否为空 /*****函数区***/
//产生随机函数
int getRand(int MinSize,int MMaxSize){
time_t t;
int r;
srand((unsigned)time(&t));
r=rand()%(MMaxSize-MinSize+)+MinSize;
return r;
} //队列初始化
void InitQueue(XHQueue *Q){
Q->front=;
Q->rear=; } //入队 Status EnQueue(XHQueue *Q,QElemType E){ if((Q->rear+)%MAXSIZE ==Q->front)//队列已满
{
return ;
}
Q->Data[Q->rear]=E;
Q->rear=(Q->rear+)%MAXSIZE;
return ;
} //出队
Status DeQueue(XHQueue *Q,QElemType *E){ //至于为什么是*E,去看看c的传值与传址,在使用的时候要写成DeQueue(Q ,&变量),传址符不能少
if(Q->front==Q->rear){//队列已空
return ;
}
*E=Q->Data[Q->front];
Q->front=(Q->front+)%MAXSIZE; return ; } //判断是否为空
Status IsEmpty(XHQueue *Q){
if(Q->front==Q->rear){
return ;
}
return ; }
/*****函数区***/ int _tmain(int argc, _TCHAR* argv[])
{
/*int r,r1;
r=getRand(20,35);
r1=getRand(20,40);
printf("%d %d\n",r,r1);*/ int Re;
XHQueue *Q;
Q=(XHQueue *)malloc(sizeof(XHQueue));
InitQueue(Q);
EnQueue(Q,);
EnQueue(Q,);
EnQueue(Q,);
EnQueue(Q,);
while(!IsEmpty(Q)){
DeQueue(Q,&Re);
printf("%d",Re);
} system("pause");
return ;
}

代码说明:原谅我比较懒。。好多都原封不动的贴上来了= =!从思路上来说,现实生活中的队列都是走一个,所有人往前移,但在程序中也写成这样,也不是不可以,但在队列比较长的时候,光移动这些元素就会花费大量的时间,是非常不划算的,所以,为了避免这样大规模的移动,使用循环队列的思想,即队头走了就走了,我们把队头指针往后移一个,队尾来人了,发现已经站不了了,那就去前面看看,前面说不定就能站呢。

恩暂时就贴这么多啦~改天有空再贴些其他的~

C语言算法系列---1.队列和栈的更多相关文章

  1. javascript实现数据结构与算法系列:队列 -- 链队列和循环队列实现及示例

    1 队列的基本概念 队列(Queue):也是运算受限的线性表.是一种先进先出(First In First Out ,简称FIFO)的线性表.只允许在表的一端进行插入,而在另一端进行删除. 队首(fr ...

  2. javascript实现数据结构与算法系列:栈 -- 顺序存储表示和链式表示及示例

    栈(Stack)是限定仅在表尾进行插入或删除操作的线性表.表尾为栈顶(top),表头为栈底(bottom),不含元素的空表为空栈. 栈又称为后进先出(last in first out)的线性表. 堆 ...

  3. Swift 算法实战之路:栈和队列

    这期的内容有点剑走偏锋,我们来讨论一下栈和队列.Swift语言中没有内设的栈和队列,很多扩展库中使用Generic Type来实现栈或是队列.笔者觉得最实用的实现方法是使用数组,本期主要内容有: 栈和 ...

  4. 算法<初级> - 第二章 队列、栈、哈希表相关问题

    算法 - 第二章 数据结构 题目一 用数组实现大小固定的队列和栈(一面题) 数组实现大小固定栈 /*** * size是对头索引(initSize是固定大小) 也是当前栈大小 * size=下个进队i ...

  5. 深入浅出数据结构C语言版(7)——特殊的表:队列与栈

    从深入浅出数据结构(4)到(6),我们分别讨论了什么是表.什么是链表.为什么用链表以及如何用数组模拟链表(游标数组),而现在,我们要进入到对线性表(特意加了"线性"二字是因为存在多 ...

  6. 算法:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

    算法:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型.<剑指offer> 利用栈来进行操作,代码注释写的比较清楚:首先判断两个栈是否是空的:其次当栈二 ...

  7. [ACM训练] 算法初级 之 数据结构 之 栈stack+队列queue (基础+进阶+POJ 1338+2442+1442)

    再次面对像栈和队列这样的相当基础的数据结构的学习,应该从多个方面,多维度去学习. 首先,这两个数据结构都是比较常用的,在标准库中都有对应的结构能够直接使用,所以第一个阶段应该是先学习直接来使用,下一个 ...

  8. 数据结构与算法(3)----->队列和栈

    1. 栈和队列的基本性质 栈是先进后出;(像是子弹夹,后进先打出) 队列是先进先出;(像是平时排队买冰淇淋,按顺序轮流) 栈和队列在实现的结构上可以有数组和链表两种形式; (1)数组结构实现容易; ( ...

  9. 【数据结构(C语言版)系列三】 队列

    队列的定义 队列是一种先进先出的线性表,它只允许在表的一端进行插入,而在另一端删除元素.这和我们日常生活中的排队是一致的,最早进入队列的元素最早离开.在队列中,允许插入的一端叫做队尾(rear),允许 ...

随机推荐

  1. 0c-42-ARC模式下如何兼容非ARC的类

    1.ARC模式下如何兼容非ARC的类 让程序兼容ARC和非ARC部分.转变为非ARC -fno-objc-arc 2.将MRC转换为ARC ARC也需要考虑循环引用问题:一端用strong,一端用we ...

  2. WPF 之 实现TextBox输入文字后自动弹出数据(类似百度的输入框)

    1.添加一个数据实体类 AutoCompleteEntry,如下: using System; using System.Collections.Generic; using System.Linq; ...

  3. The Last Practice

    Problem Description Tomorrow is contest day, Are you all ready?We have been training for 45 days, an ...

  4. 2015 FVDI V6.3 Software Free Download

    2015 FVDI with software USB dongle has newly upgraded to V6.3. Here software upgrade list: ABRITES C ...

  5. 【Shell脚本学习6】Shell变量:Shell变量的定义、删除变量、只读变量、变量类型

    Shell支持自定义变量. 定义变量 定义变量时,变量名不加美元符号($),如: variableName="value" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编 ...

  6. OnTouchListener事件监听实现方式之GestureDetector

    当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等. 一般情况下,我们知道View类有个View.OnTouchListener内部接口,通过重写他的onTouc ...

  7. Git 暂存区

    可以用 git log 查看提交日志(附加的 --stat 参数可以看到每次提交的文件变更统计). $ cd /path/to/my/workspace/demo $ git log --stat 如 ...

  8. css+div网页设计(二)--布局与定位

    在网页设计中,能否控制好各个模块中在页面中的位置是非常关键的,与传统的表格定位不同,css+div定位方式更加的灵活,本篇博客将为大家介绍css+div的布局与定位. 一.盒子模型 由图可以看出 盒子 ...

  9. 使用JDBC-ODBC读取Excel文件

    以下代码我没有真正去实践,紧做为总结,方便以后查阅: 这种方法需要设置ODBC源..... 参考: http://xytang.blogspot.com/2008/02/how-to-connect- ...

  10. 第03篇. 标准Web项目Jetty9内嵌API简单启动

    一直以来,想改变一些自己早已经习惯的事情. 到了一定年龄,便要学会寡言,每一句话都要有用,有重量. 喜怒不形于色,大事淡然,有自己的底线. --胖先生 昨天,简单的说了一下关于Jetty9的配置,大家 ...