http://www.cnblogs.com/tedzhao/archive/2008/11/12/1332112.html

看这篇的链表部分的介绍应该就能理解“可持久化”了

动态分配内存的会T,只能用静态

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>
using namespace std; struct node {
int p;
int next;
};
const int maxn = ;
node nd[maxn * ];
int ha[maxn], hb[maxn];
int c;
int cnt;
void add(int &head, int p) {
nd[cnt].p = p;
nd[cnt].next = head;
head = cnt++;
}
int main() {
int n, m;
while(scanf("%d%d", &n, &m) != EOF) {
c = ;
cnt = ;
ha[c] = -; hb[c] = -;
for(int i = ; i <= n; i++) {
char op[]; scanf("%s", op);
if(strcmp(op, "learn") == ) {
int id, p;
scanf("%d%d", &id, &p);
add(ha[id], p);
hb[id] = -;
} else if(strcmp(op, "rollback") == ) {
int id;
scanf("%d", &id);
add(hb[id], nd[ha[id]].p);
ha[id] = nd[ha[id]].next;
} else if(strcmp(op, "clone") == ) {
int id;
scanf("%d", &id);
c++;
ha[c] = ha[id];
hb[c] = hb[id];
} else if(strcmp(op, "check") == ) {
int id;
scanf("%d", &id);
if(ha[id] == -) {
printf("basic\n");
} else printf("%d\n", nd[ha[id]].p);
} else if(strcmp(op, "relearn") == ) {
int id;
scanf("%d", &id);
add(ha[id], nd[hb[id]].p);
hb[id] = nd[hb[id]].next;
}
}
return ;
}
return ;
}

URAL 1992 CVS 可持久化链栈的更多相关文章

  1. URAL 1992 CVS

    CVS 题目连接: http://acm.timus.ru/problem.aspx?space=1&num=1992 Description Yoda: Visit I will the c ...

  2. URAL 1992 CVS 链表

    不更改链表结构,只是添加节点,没有删除节点.通过记录和更改标记来模拟题意的插入和删除,复制 指针模拟链表: 预开指针,存在M[]中,可以提高效率 #include<functional> ...

  3. 03链栈_LinkStack--(栈与队列)

    #include "stdio.h" #include "stdlib.h" #include "io.h" #include " ...

  4. 从零开始学C++之数据封装与抽象:分别用C和C++来实现一个链栈

    下面通过分别用C和C++来实现一个链栈(链表实现),从中体会数据封装抽象的思想: C语言实现:  C++ Code  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  5. java与数据结构(6)---java实现链栈

    栈之链式存储结构链栈 链栈 栈的链式存储结构成为链栈.链栈是没有头结点,头结点就是栈顶指针top. 代码结构 package list; public interface Stackable;公共接口 ...

  6. 链栈之C++实现

    链栈是借用单链表实现的栈.其不同于顺序栈之处在于: 1.链栈的空间是程序运行期间根据需要动态分配的,机器内存是它的上限.而顺序栈则是 静态分配内存的. 2.链栈动态分配内存的特性使得它一般无需考虑栈溢 ...

  7. C++实现链栈的基本操作

    之前对顺序栈写了基本操作,认为有必要也动手练练栈的链表实现. 对于链栈,一般不会出现栈满的情况. 链栈头文件定义例如以下: #ifndef CSTOCK_H_ #define CSTOCK_H_ ty ...

  8. 【小白成长撸】--链栈(C语言版)

    // 链栈.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> #include <st ...

  9. C语言简单实现链栈基本几个功能(适合新手看,大神可指正)

            接着上一次的顺序栈,今天我记一下链栈,因为我也是刚学不久,有些地方也稍稍理解不了,所以,一起共勉.我会用我自己结合教材上画的图,争取跟代码一起结合,用文字和图最大化的解释代码,这样的话 ...

随机推荐

  1. leetcode 189

    189. Rotate Array Rotate an array of n elements to the right by k steps. For example, with n = 7 and ...

  2. 29. Xshell连接Linux下Oracle无法回退的解决办法

    使用Xshell 连接远程Linux 数据库服务器,当切换到sqlplus 控制台时,输入错误字符的时候,使用回退键修改时,显示^H. 解决方法:切换至root用户,直接输入stty erase ^H ...

  3. Linux常用目录及文件

    1./etc/sysconfig/network 操作相关:hostname设置 2./etc/sysconfig/network-scripts/ifcfg-ethX(X为0.1等编号,一般为0) ...

  4. Entity Framework走马观花之把握全局 (转)

    上一篇<Entity Framework技术导游系列开篇与热身 > ========================================= 在深入学习某项技术之前,应该努力形成 ...

  5. JS Json数据转换

    *** json字符串中不能出现单引号,不然JSON.parse会报错,处理方式将单引号转义 概述 JSON.stringify() 方法可以将任意的 JavaScript 值序列化成 JSON 字符 ...

  6. matlab 按照某列以行为单位进行排序

    a=[2 1 3 21 44 3] 然后按照第一列进行排序 sortrows(a,1) ans = 1 4 2 1 3 2 4 3 如要逆序,可以逆序读矩阵即可

  7. php上传大文件设置方法

    打开php.ini,首先找到 ;;;;;;;;;;;;;;;; ; file uploads ; ;;;;;;;;;;;;;;;; 区域,有影响文件上传的以下几个参数: file_uploads = ...

  8. etc这个目录

    自己对他的记忆最深了,因为每次你添加新的软件向电脑里时,软件都会有一个自己的配置文件,那么你修改这个配置文件的某个选项,就可以改变软件的某个功能. 或者是某个外设都有自己的配置文件. 其实这个配置文件 ...

  9. quartz 框架定时任务,使用spring @Scheduled注解执行定时任务

    配置quartz 在spring中需要三个jar包: quartz-1.6.5.jar.commons-collections-3.2.jar.commons-logging-1.1.jar 首先要配 ...

  10. DIOCP之开发流程图之Client

    本次分析开发流程图采用的是DIOCP群里的群友[彩蛋]所给的DEMO,依然是win7的画图作品. 本人分析认为:学习网络开发不同本地开发,首先你应该知道完整的开发流程即网络程序运行的先后顺序,有个整体 ...