#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的更多相关文章

  1. 手工数据结构系列-C语言模拟队列 hdu1276

    #include <stdio.h> #include <stdlib.h> #define init_size 1000 typedef struct { int head, ...

  2. 手工数据结构系列-C语言模拟栈 hdu1022

    这个题我一开始是这么想的.. 爆搜所有可能的出栈序列 然后对输入进行匹配 这样我感觉太慢 然后我们可以想到直接通过入栈序列对出栈序列进行匹配 但是我犯了一个错误..那就是出栈序列一定到入栈序列里找.. ...

  3. 【JavaScript数据结构系列】04-优先队列PriorityQueue

    [JavaScript数据结构系列]04-优先队列PriorityQueue 码路工人 CoderMonkey 转载请注明作者与出处 ## 1. 认识优先级队列 经典的案例场景: 登机时经济舱的普通队 ...

  4. php中数组模拟队列、栈的函数以及数组指针操作

    1,数组指针,current表示当前指针,输出其指向的元素:next表示指针移动到下一个元素:prev指针移动到上一个元素:end表示指针移动到最后一个元素:reset表示指针移动到第一个元素: &l ...

  5. [数据结构] 用C语言模拟一个简单的队列程序

    #include<stdio.h> #include <stdlib.h> #include<string.h> #include<math.h> // ...

  6. Javascript与数据结构系列(二)——队列的实现

    队列实现 使用数组来实现队列看起来顺理成章.JavaScript 中的数组具有其他编程语言中没有的优点, 数组的 push() 方法可以在数组末尾加入元素,shift() 方法则可删除数组的第一个元素 ...

  7. 【数据结构】C++语言环形队列的实现

    队列--先进先出 队列的一个缺点--出队后的内存空间浪费了,不能二次利用 环形队列--解决以上缺点的队列,用过的内存空间可以重复利用 github: https://github.com/HITFis ...

  8. 数据结构之C语言模拟整数数组实现

    #include <stdio.h> #include <malloc.h> #include <stdlib.h> typedef struct Arr { in ...

  9. 【三支火把】---队列和栈的C程序实现

    这几天总结了C语言的队列,栈的实现方法,在此总结一下:一.栈 首先从栈开始,诚然,相信学习过数据结构的你,肯定应该知道栈是什么东西了,如果不知道也没事每一句话我就可以帮你总结--数据只在栈顶进行插入和 ...

随机推荐

  1. DockerFile关键字相关作用以及解释

    Dockerfile 关键字 作用 备注 FROM 指定父镜像 指定dockerfile基于那个image构建 MAINTAINER 作者信息 用来标明这个dockerfile谁写的 LABEL 标签 ...

  2. saltstack 服务器批量管理

    学习saltstack 服务器批量管理 1.saltstack 简介 SaltStack是一个开源的.新的基础平台管理工具,使用Python语言开发,同时提供Rest API方便二次开发以及和其他运维 ...

  3. c#使用谷歌身份验证GoogleAuthenticator

    此功能相当于给系统加了个令牌,只有输入对的一组数字才可以验证成功.类似于QQ令牌一样. 一丶创建最核心的一个类GoogleAuthenticator 此类包含了生成密钥,验证,将绑定密钥转为二维码. ...

  4. Linux网卡没有eth0显示ens33原因以及解决办法

    原因 首先说明下eth0与ens33的关系: 目前的主流网卡为使用以太网络协定所开发出来的以太网卡 (Ethernet),因此我们 Linux 就称呼这种网络接口为 ethN (N 为数字). 举例来 ...

  5. React中组件间通信的方式

    React中组件间通信的方式 React中组件间通信包括父子组件.兄弟组件.隔代组件.非嵌套组件之间通信. Props props适用于父子组件的通信,props以单向数据流的形式可以很好的完成父子组 ...

  6. cpdd 坐标:SD

    updata on:2021.1.17 闲来无事继续鸽 性别:男 先鸽一会想起来再填/se

  7. Java——入门“HelloWorld”

    //Java程序的结构 //下面这个:外层框架 public class HellloWorld { // Java入口程序框架 //类名与文件名完全一样 public static void mai ...

  8. 子网划分、变长子网掩码和TCP/IP排错__IP寻址排错

    1.Cisco推荐使用的排错四步曲: ping环回地址:ping NIC:ping默认网关和ping远端设备. 1. 打开DOS窗口并ping127.0.0.1.这是一个诊断或环回地址,如果你得到一个 ...

  9. 2013 Asia Hangzhou Regional Contest hdu4780 Candy Factory

    参考:https://blog.csdn.net/sd_invol/article/details/15813671 要点 每个任务的结束时间是固定的,不受任何因素影响 机器只在最一开始有用,在那之后 ...

  10. [CF套题] CF-1201

    CF-1201 传送门 # = * A 500 B 1000 C 1500 D 2000 E1 2000 E2 1000 1 (2217) 1672 482 00:09 400 01:40 790 0 ...