Download presentation
Presentation is loading. Please wait.
Published byErica Daniels Modified over 9 years ago
2
2004-03L.Chen1 Chapter 3 DATA REPRESENTATION(2)
3
2004-03L.Chen2 3.4.4 A Chain Iterator Class 3.4.4 A Chain Iterator Class ( 遍历器类 ) An iterator permits you to examine the elements of a data structure one at a time. Suppose for a moment that Output( ) is not a member function of Chain and that << is not overloaded for this class.
4
2004-03L.Chen3 A Chain Iterator Class int len = x.length( ); for ( int i=1; i<=len; i++) { x.find(i,x);Cout<< x<< ‘‘ ;} the complexity of this code is Θ ( n 2 ), the Output() is Θ( n) An iterator records the current position and advance one position right each time.
5
2004-03L.Chen4 Program 3.18 Chain iterator class template class ChainIterator{ public: T* Initialize (const Chain & c) { location = c.first; if (location) return &location->data; return 0; } T* Next ( ) { if (!location) return 0; location = location->link; if (location) return &location->data; return 0; } private: ChainNode *location; };
6
2004-03L.Chen5 Program 3.19 Outputting the integer chain X using a chain iterator int *x; ChainIterator c; x = c.Initialize(X); while (x) { cout << *x << ' '; x = c.Next();} cout << endl;
7
2004-03L.Chen6 3.4.5 Circular List Representation a chain is simplified and made to run faster by doing one or both of the following: 1) represent the linear list as a singly linked circular list (circular list) 2) add an additional node, called the head node at the front.
8
2004-03L.Chen7 Comparing Difference: head pointer ; head node
9
2004-03L.Chen8 Circular List abcde firstNode
10
Program 3.20 Searching a circular linked list with head node template int CircularList : : Search(const T& x) const { // Locate x in a circular list with head node. ChainNode *current = first->link; int index = 1; // index of current first->data = x; // put x in head node // search for x while (current->data != x) { current = current->link; index++; } // are we at head? return ((current == first) ? 0 : index); }
11
2004-03L.Chen10 3.4.6 Comparison with Formula-Based Representation formula-based representation: Continuous space; It is easy to search an element. The procedures for insertion and deletion are more complex. Time Complexity to access kth element is Θ(1) Chain and circular list representation: The run time of the Insert and delete from a linear list will be smaller than the formula-based representation. Time Complexity to access kth element is O( k ).
12
2004-03L.Chen11 3.4.7 Doubly Linked List Representation 为什么要引入双向链表? 在单链表中,寻找下一个元素时间复杂度为 O(1), 寻找上一个元素时间复杂度为 O(n) 。为了 克服单链表的缺点,引入双链表。
13
2004-03L.Chen12 链表的具体结构 A doubly linked list is an ordered sequence of nodes in which each node has two pointers: left pointer ( 前趋 ) and right pointer (后继). 优点:可以向前、向后访问,效率高。 缺点:需要更多的空间,结构更复杂。
14
2004-03L.Chen13 Doubly Linked List abcde null firstNode null lastNode
15
2004-03L.Chen14 Doubly Linked Circular List abcde firstNode
16
2004-03L.Chen15 Doubly Linked Circular List With Header Node abce headerNode d
17
2004-03L.Chen16 Empty Doubly Linked Circular List With Header Node headerNode
18
2004-03L.Chen17 Circular Doubly Linked List ( 双向循环链表 ) a) Nodeb) Null List c) Circular Doubly Linked List L D R
19
template class DoubleNode{ friend Double ; private: T data; DoubleNode *left, *right; }; template class Double{ public: Double() { LeftEnd=RightEnd=0; }; ~Double(); int Length()const; bool Find (int k, T& x) const ; int Search (const T& x) const ; Double & Delete (int k, T& x); Double & Insert (int k, const T& x); void Output (ostream& out) const ; private : DoubleNode *LeftEnd, *RightEnd; }; Program 3.21 Class definition for doubly linked lists
20
2004-03L.Chen19 (1) (2) Delete (k) 删除第 k 个元素 e = p->data; p->prior->next = p->next; p->next->prior = p->prior; = k
21
2004-03L.Chen20 insert (k, x) 在第 k 个元素之前插入 x (1) (2) (3) (4) s->data =x; s->prior =p->prior; p->prior->next = s; s->prior =p; p->prior = s; S = k
22
2004-03L.Chen21 3.4.8 Summary Chain Singly linked circular list Head node Doubly linked list Circular doubly linked list
23
2004-03L.Chen22 3.5 Indirect Addressing 3.5.1 Representation 间接寻址的定义、引入的目的。 如何实现间接寻址?
24
2004-03L.Chen23 template class IndirectList{ public: IndirectList(int MaxListSize=10); ~IndirectList( ); bool IsEmpty( )const {return length==0;} int Length( )const {return length;} bool Find(int k,T& x) const ; int Search(const T& x) const ; IndirectList & Delete(int k, T& x); IndirectList & Insert(int k, const T& x); void Output(ostream& out) const ; private:T **table; // 1D array of T pointers int length, MaxSize; }; Program 3.22 Class definition for an indirectly addressed list
25
2004-03L.Chen24 3.5.2 Operations template IndirectList :: indirectList (int MaxListSize) { MaxSize = MaxListSize; table = new T *[MaxSize]; length = 0; } template IndirectList :: ~indirectList( ) { for (int i = 0; i < length; i++) delete table[i]; delete [ ] table; } Program 3.23 Constructor and destructor for indirect addressing
26
2004-03L.Chen25 template bool IndirectList ::Find(int k, T& x) const { if (k length) return false; x = *table[k - 1]; return true; } Program 3.24 Find operation for indirect lists
27
2004-03L.Chen26 template IndirectList & IndirectList ::Delete(int k,T& x) { if (Find(k, x)) { for (int i = k; i < length; i++) table[i-1] = table[i]; length--; return *this ; } else throw OutOfBounds( ); } Program 3.25 Deletion from an indirect list
28
2004-03L.Chen27
29
2004-03L.Chen28 template IndirectList & IndirectList ::Insert(int k, const T& x) { if (k length) throw OutOfBounds(); if (length == MaxSize) throw NoMem( ); for (int i = length-1; i >= k; i--) table[i+1] = table[i]; table[k] = new T; *table[k] = x; length++; return *this ; } Program 3.26 Insertion into an indirectly addressed list
30
2004-03L.Chen29 3.6 Simulating Pointers
31
2004-03L.Chen30 Simulated-Pointer Memory Layout Data structure memory is an array, and each array position has an element field (type Object) and a next field (type int). caedb
32
2004-03L.Chen31 Node Representation package dataStructures; class SimulatedNode { // package visible data members Object element; int next; // constructors not shown }
33
How It All Looks 14 caedb caedb 01234581114 0118 firstNode = 4 next element
34
2004-03L.Chen33 Still Drawn The Same abcde firstNode
35
2004-03L.Chen34 Marking Unmark all nodes (set all mark bits to false). Start at each program variable that contains a reference, follow all pointers, mark nodes that are reached. caedb firstNode
36
2004-03L.Chen35 Marking caedb firstNode caede Repeat for all reference variables. Start at firstNode and mark all nodes reachable from firstNode.
37
2004-03L.Chen36 Compaction Move all marked nodes (i.e., nodes in use) to one end of memory, updating all pointers as necessary. cbedb firstNode aed Free Memory
38
2004-03L.Chen37 Simulated Pointers Can allocate a chain of nodes without having to relink. Can free a chain of nodes in O(1) time when first and last nodes of chain are known.
39
2004-03L.Chen38 3.7 A Comparison
40
2004-03L.Chen39 Exercises Chapter3 Ex27; Ex31; Ex34; Ex37; Ex53
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.