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

这是开头,就写写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. Java HttpClient使用小结

    httpclient是apache的一个项目:http://hc.apache.org/ 文档比較完好:http://hc.apache.org/httpcomponents-client-ga/tu ...

  2. LINUX HOOK

    http://blog.csdn.net/yyttiao/article/details/7346287

  3. 进程间通信和同步:pipe、FIFO、消息队列、信号量、共享内存、信号

    一.半双工管道(pipe) 关于管道详细介绍可参考http://www.cnblogs.com/nufangrensheng/p/3560130.html. 1.管道实现父子进程间通信实例: /* p ...

  4. 16g u盘变 成1g u盘 解决方案,使用驱动器中的光盘之前需要将其格式化

    1\ 计算机----管理------磁盘管理  有一个黑色区域是未分配的 2\ 1)进入cmd 命令行窗口2)输入 diskpart,并回车.弹出系统提示,选是即可.3)输入 list disk,并回 ...

  5. n-1位数

    描述 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的数.   输入 第一行为M,表示测试数据组数.接下来M行,每行包含一个测试数据. 输出 ...

  6. GCD调度组、自定义队列来实现多个下载任务

    #define KURL1 @"http://img0.imgtn.bdimg.com/it/u=79920747,2237302485&fm=90&gp=0.jpg&quo ...

  7. 【python,排序】几种常用的排序算法,使用python实现

    1. 选择排序 -- -- def selectSort(l): for i in range(len(l)): j = i + 1 t_min = l[i] loc_min = i for j in ...

  8. Java Lock

    JVM中的另一种锁Lock的实现.与synchronized不同的是,Lock完全用Java写成,在java这个层面是无关JVM实现的.在java.util.concurrent.locks包中有很多 ...

  9. python pdb调试

    在交互环境中通常使用pdb.run来调试: import pdb def pdb_test(arg): for i in range(arg): print(i) return arg pdb.run ...

  10. a different object with the same identifier value was already associated withthe session异常解决方案

    异常信息: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was ...