摘要:
先来看一个例子:struct record{ string name; int age; vector<int> grades;};则sizeof(record)大小为多少?答案是:20(G++编译器下)了解string,int的朋友很熟悉,string和int在G++下都是4字节,这样看来 grades的大小应为12字节。给grades中放入三个整型值,100,110,120,sizeof(grades),竟然还是12!由此说来,sizeof(vector<type>)的大小,跟容器里面存放多少数据无关,它是在编译期确定的一个值,仅跟具体的编译器有关。用一段程序测试一 阅读全文
摘要:
题目:给出两个单向链表的头指针,比如h1,h2,判断这两个链表是否相交。(如图,假设两个链表均不带环)思路一:最直观的解法就是判断第一个链表中的每个节点是否在第二个链表中。 这种方法的时间复杂度是O(Length(h1)*Length(h2))思路二:(哈希)对第一个链表的节点地址进行hash,建立长度为Length(h1)的哈希表。然后对第二个链表中的每个节点 地址进行hash,在哈希表中查询,若在表中出现,则有共同节点,链表相交。 这种方法的时间复杂度是O(Length(h1)+Length(h2)),空间复杂度为哈希表的长度O(Length(h1)).思路三:(问... 阅读全文
摘要:
题目:假设有一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(非第一个节点, 也非最后一个节点)。请将该节点从单链表中删除。解答: 典型的“狸猫换太子”, 若要删除该节点,正常情况下,应该要知道该节点的前面节点的指针,但是由于单链表中没有头结点,所以无法追溯到该节点前面的那个节点,因此,这里采用了“移花接木”的方法。设该节点为B,下一个节点为C。那么,首先将B节点的内容替换为C节点的内容,然后,将C节点删除,这样就达到了我们的目的。代码如下:pcur->next = pnext->next;pcur->data = pnext->date;delete pne 阅读全文