void set(int key, int value) { if (key_node_table.count(key)) { //found in the cache Node* node = key_node_table[key]; node->value = value; key_node_table[key] = node; node->prev->next = node->next; node->next->prev = node->prev; appendTail(node); return; } else { //not in the cache if (key_node_table.size() == cap) { //if full, remove one //remove head Node* tmp = head->next; head->next = head->next->next; head->next->prev = head; key_node_table.erase(tmp->key); } //else if not full, skip remvoving Node* node = new Node(key, value); appendTail(node); key_node_table[key] = node; } }
inline void XmlNode::appendContents(std::ostream& ss) const { appendHead(ss); appendValue(ss); appendChildren(ss); appendTail(ss); }
int main(){ InitStack(&stack0); InitStack(&stack1); int origin[] = {1,2,3,4,5,6}; int length = sizeof(origin)/sizeof(int); int i=0; int testNum = 3; for(i=0;i<testNum;i++){ appendTail(origin[i]); } for(i=0;i<testNum;i++){ printf("%d",deleteHead()); } for(i=testNum;i<length;i++){ appendTail(origin[i]); } for(i=testNum;i<length;i++){ printf("%d",deleteHead()); } }
int get(int key) { if (key_node_table.count(key) == 0) //not found return -1; else { //touch the node, and return value with the ht Node* node = key_node_table[key]; //remove node from the list node->prev->next = node->next; node->next->prev = node->prev; appendTail(node); return node->value; } }