手工数据结构系列-C语言模拟队列和栈 hdu1702
#include <stdio.h>
#include <stdlib.h>
//================= DATA STRUCTURE =========================
//================= Stack ==================================
#define __init_size 1000
typedef struct{
int size,__size,head,tail,*seq;
}Stack; typedef Stack* S_P;
void __init(S_P s){
s->head=s->tail=s->size=0;
s->__size=__init_size;s->seq=(int*)malloc(__init_size*sizeof(Stack));//少了__init_size
}
int __empty(S_P s){
if(s->head==s->tail) return 1;
return 0;
}
void __push(S_P s,int ele){
if(s->tail+1>=s->__size){
s->seq=(int*)realloc(s->seq,sizeof(Stack)*(s->__size+=__init_size));
}
s->seq[s->tail++]=ele;s->size++;
}
void __pop(S_P s){
if(!__empty(s)) s->tail--,s->size--;
}
int __top(S_P s){
if(!__empty(s)) return s->seq[s->tail-1];
}
void __test(){
S_P s=(S_P)malloc(sizeof(S_P));__init(s);
int i;for(i=0;i<10;++i) __push(s,i);
while(!__empty(s)) {printf("%d ",__top(s));__pop(s);}
printf("\n");
}
//======================= QUEUE ============================
#define init_size 1000
typedef struct {
int head,tail,size,__size,*seq;
}Queue;
typedef Queue* Q_P;
void init(Q_P q){
q->head=q->tail=0;q->__size=init_size;q->size=0;
q->seq=(int*)malloc(init_size*sizeof(Queue));
}
void push(Q_P q,int ele){
if(q->tail+1>=q->__size){
q->seq=(int*)realloc(q->seq,sizeof(int)*(q->__size+=init_size));
}
q->seq[q->tail++]=ele;
q->size++;
//debug
// printf("PUSH %d SIZE:%d\n",q->seq[q->tail-1],q->size);
}
int empty(Q_P q){
if(q->head==q->tail) return 1;
return 0;
}
void pop(Q_P q){
if(!empty(q)) q->head++,q->size--;
if(empty(q)) q->head=q->tail=0;
// printf("POP SIZE:%d\n",q->size);
}
int front(Q_P q){
if(!empty(q)) return q->seq[q->head];
}
void print(Q_P q){
printf("%d",front(q));pop(q);
while(q->size!=0) {printf(" %d",front(q));pop(q);}
printf("\n");
}
void test(){
int i;
Q_P q=(Q_P)malloc(sizeof(Queue));
init(q);
for(i=0;i<10;++i) {push(q,i);}
print(q);
}
//=================== SOLVE FUNCTION ========================
void solve(){
int i,x,n,T;scanf("%d",&T);
char type[8],op[4];
S_P s=(S_P)malloc(sizeof(Stack));__init(s);
Q_P q=(Q_P)malloc(sizeof(Queue));init(q);
while(T--){
scanf("%d%s",&n,type);
if(type[2]=='F') {while(!empty(q)) pop(q);}else {while(!__empty(s)) __pop(s);}
for(i=0;i<n;++i){
scanf("%s",op);
if(op[0]=='I') scanf("%d",&x);
if(type[2]=='F'){
//FIFO QUEUE
if(op[0]=='I'){
push(q,x);
}
else{
if(empty(q)) printf("None\n");
else {printf("%d\n",front(q));pop(q);}
}
}
else{
if(op[0]=='I'){
__push(s,x);
}
else{
if(__empty(s)) printf("None\n");
else {printf("%d\n",__top(s));__pop(s);}
}
}
}
}
}
int main(){
solve();
return 0;
}

没了__init_size ,然后肯定越界访问了啊,然后本地还没报错。。结果还对的。。一定要小心这个错误
手工数据结构系列-C语言模拟队列和栈 hdu1702的更多相关文章
- 手工数据结构系列-C语言模拟队列 hdu1276
#include <stdio.h> #include <stdlib.h> #define init_size 1000 typedef struct { int head, ...
- 手工数据结构系列-C语言模拟栈 hdu1022
这个题我一开始是这么想的.. 爆搜所有可能的出栈序列 然后对输入进行匹配 这样我感觉太慢 然后我们可以想到直接通过入栈序列对出栈序列进行匹配 但是我犯了一个错误..那就是出栈序列一定到入栈序列里找.. ...
- 【JavaScript数据结构系列】04-优先队列PriorityQueue
[JavaScript数据结构系列]04-优先队列PriorityQueue 码路工人 CoderMonkey 转载请注明作者与出处 ## 1. 认识优先级队列 经典的案例场景: 登机时经济舱的普通队 ...
- php中数组模拟队列、栈的函数以及数组指针操作
1,数组指针,current表示当前指针,输出其指向的元素:next表示指针移动到下一个元素:prev指针移动到上一个元素:end表示指针移动到最后一个元素:reset表示指针移动到第一个元素: &l ...
- [数据结构] 用C语言模拟一个简单的队列程序
#include<stdio.h> #include <stdlib.h> #include<string.h> #include<math.h> // ...
- Javascript与数据结构系列(二)——队列的实现
队列实现 使用数组来实现队列看起来顺理成章.JavaScript 中的数组具有其他编程语言中没有的优点, 数组的 push() 方法可以在数组末尾加入元素,shift() 方法则可删除数组的第一个元素 ...
- 【数据结构】C++语言环形队列的实现
队列--先进先出 队列的一个缺点--出队后的内存空间浪费了,不能二次利用 环形队列--解决以上缺点的队列,用过的内存空间可以重复利用 github: https://github.com/HITFis ...
- 数据结构之C语言模拟整数数组实现
#include <stdio.h> #include <malloc.h> #include <stdlib.h> typedef struct Arr { in ...
- 【三支火把】---队列和栈的C程序实现
这几天总结了C语言的队列,栈的实现方法,在此总结一下:一.栈 首先从栈开始,诚然,相信学习过数据结构的你,肯定应该知道栈是什么东西了,如果不知道也没事每一句话我就可以帮你总结--数据只在栈顶进行插入和 ...
随机推荐
- 转 12 jmeter性能测试实战--web程序
12 jmeter性能测试实战--web程序 项目背景 项目:XX网站环境:Windows需求:并发登录的性能测试场景:1s增加2个线程,运行2000次(线程数20,Ramp-Up seconds ...
- charles配置
https://www.cnblogs.com/ceshijiagoushi/p/6812493.html https://www.zzzmode.com/mytools/charles/
- SELECT ... FOR UPDATE or SELECT ... FOR SHARE Locking Reads session
小结: 1.注意使用限制 Locking reads are only possible when autocommit is disabled (either by beginning transa ...
- 能够满足这样要求的哈希算法有很多,其中比较著名并且应用广泛的一个哈希算法,那就是MurmurHash 算法。尽管这个哈希算法在 2008 年才被发明出来,但现在它已经广泛应用到 Redis、MemCache、Cassandra、HBase、Lucene 等众多著名的软件中。
能够满足这样要求的哈希算法有很多,其中比较著名并且应用广泛的一个哈希算法,那就是MurmurHash 算法.尽管这个哈希算法在 2008 年才被发明出来,但现在它已经广泛应用到 Redis.MemCa ...
- 拓扑排序(topo sort)之 最大食物链计数( 洛谷P4017)
前言: 复习复习拓扑排序,自己把自己弄没了/kk 题目传送门 简化题意: 在一个DAG中,求从所有入度为0的点到所有出度为0的点路径的条数 md理解错题意把自己卡了半天,生物学的好的就可以直接理解为求 ...
- Java关键字及作用解释
访问控制 1) private 私有的 private 关键字是访问控制修饰符,可以应用于类.方法或字段(在类中声明的变量). 只能在声明 private(内部)类.方法或字段的类中引用这些类.方法或 ...
- kubenetes 相关命令(转载)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xingwangc2014/article/details/51204224好久没写博客了,前段时间公 ...
- 云服务器镜像问题("Couldn't resolve host 'mirrors.tencentyun.com')
云服务器镜像问题("Couldn't resolve host 'mirrors.tencentyun.com') 原因: 腾讯云服务器内网yum源的域名 mirrors.tencentyu ...
- 飞塔创建IPSec
5.2和5.4版本飞塔建立IPSec VPN时,必须在两端添加完策略.路由后IPSec才会起来.
- markdown编辑器typora本地图片上传到自己的服务器
typora是windows平台下最受欢迎的markdown书写工具和查看工具,本篇文章将会介绍如何在typora平台使用java脚本程序自动上传本地图片到自己的服务器,从而让markdown文章中的 ...