考虑poj3320尺取法的做法,与此题基本一样,但是此题的 位置 的范围到2^31 尺取法不可。将每种珠子所在的位置排序。每种珠子要维护一个指针,指到已经用到这个种类的哪个珠子。所以尺取法用堆优化,每次从堆中取出最小的,相当于尺取法的头指针向后移动。然后从每种珠子里向后取出一个位置(指针++)(已经...
分类:
其他好文 时间:
2014-09-13 17:02:25
阅读次数:
234
(一)顺序表1.基本概念: 首元结点:存储第一个数据元素的结点。 头结点:在链表的首元结点之前附设一个结点,便于对首元结点操作。 头指针:指向链表中的第一个结点。 插入/删除:在顺序表中插入或删除一个元素,需要平均移动一半个元素,具体移动的元素个数与元素位置有关。 在单链表中,除了首元结点...
分类:
其他好文 时间:
2014-09-10 15:35:30
阅读次数:
259
队列头指针为front,队列尾指针为rear(指向队尾元素),after_rear为队尾元素的后一位置(按顺时针方向),队列容量为maxsize 如果用 front == rear 来表示队列为空,也就是说front和rear指向同一个位置,那么: 队列满时:(rear+1) mod maxsize...
分类:
其他好文 时间:
2014-09-04 22:07:50
阅读次数:
513
实现一个基本的链表,包括在链表后添加数据节点和输出链表i所有数据的功能 1 #include 2 #include 3 4 typedef struct node 5 { 6 int data; 7 struct node *link; 8 }NODE; 9 10 //定义头指针1...
分类:
编程语言 时间:
2014-09-01 22:33:13
阅读次数:
319
经典题目,代码如下: 1 #include 2 #include 3 using namespace std; 4 struct ListNode { 5 int m_iData; 6 ListNode* m_pNext; 7 }; 8 ListNode* Reverse(Lis...
分类:
其他好文 时间:
2014-09-01 19:10:03
阅读次数:
257
循环队列中,由于入队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针,造成队空和队满时头尾指针均相等。因此,无法通过条件front==rear来判别队列是"空"还是"满"。解决这个问题的方法至少有三种:① 另设一布尔变量以区别队列的空和满;② 少用一个元素的空间。约定入队前,测试尾指针在循环意义下...
分类:
其他好文 时间:
2014-08-30 21:40:40
阅读次数:
419
给定一个单链表,只给出头指针h:1、如何判断是否存在环?2、如何知道环的长度?3、如何找出环的连接点在哪里?4、带环链表的长度是多少?解法:1、对于问题1,使用追赶的方法,设定两个指针slow、fast,从头指针开始,每次分别前进1步、2步。如存在环,则两者相遇;如不存在环,fast遇到NULL退出...
分类:
其他好文 时间:
2014-08-17 11:34:22
阅读次数:
236
按照书上的说法,引入头结点有一下两个优点:
由于开始结点的位置被存放在头结点的指针域中,所以在链表的第一个位置上的操作和在表的其他位置上的操作一致,无须进行特殊处理。
无论链表是否为空,其头指针是指向头结点的非空指针,因此空表和非空表的处理也就一致了。
你可能会疑惑:难道非得要头指针吗?难道没有头结点,插入、删除、空表的处理就不一致了吗?(貌似有一些同学和我有同样的疑问)...
分类:
其他好文 时间:
2014-08-16 22:33:51
阅读次数:
300
60.在 O(1)时间内删除链表结点(链表、算法)。题目:给定链表的头指针和一个结点指针,在 O(1)时间删除该结点。链表结点的定义如下:struct ListNode{int m_nKey;ListNode* m_pNext;};函数的声明如下:void DeleteNode(ListNode*....
分类:
其他好文 时间:
2014-08-14 15:56:18
阅读次数:
148
struct ListNode
{
int m_nValue;
ListNode* m_pNext;
};
//增加节点
/*第一个参数是一个指向指针的指针。当我们往一个空链表中插入一个节点时,新插入的节点
就是链表的头指针。由于此时会改动头指针,因此必须把pHead参数设为指向指针的指针*/
void addToTail(ListNode** pHead, int value) ...
分类:
其他好文 时间:
2014-08-11 15:00:22
阅读次数:
307