?? p74_75.cpp
字號:
//Test is T74_75.cpp #include <stdio.h> #include <iostream.h> class List; //List類的前視聲明 class ListNode { //結點類定義 friend class List; friend ostream & operator << ( ostream&, List & ); //聲明List類為友元類 public: //ListNode() { data = 0; link = NULL; ); ListNode( int x, ListNode * p ) { data = x; link = p; } private: int data; //數據元素域 ListNode *link; //鏈指針域 }; class List { //List類定義 friend ostream & operator << ( ostream&, List & ); //聲明List類為友元類 public: List(): first( NULL ) {}; //鏈表公共操作 //……… int Insert ( const int x, const int i ); int Remove ( int i ); private: ListNode *first, *last; //指向鏈表表頭的指針 }; #include <iostream.h> int List::Insert ( const int x, const int i ) { //將新元素x插入到第i結點之前。i是結點號,從0開始。 ListNode *p = first; int k = 0; while ( p != NULL && k< i-1 ) { p = p->link; k++; } //循鏈找第i-1個結點 if ( p == NULL && first != NULL ) { //非空表而且鏈短,找不到第i-1個結點 cout << "Invalid position for Insertation!\n"; return 0; //終止插入, 函數返回0 } ListNode *newnode= new ListNode( x, NULL ); //建立一個newnode指示的新結點, 數據為x if ( first == NULL || i == 0 ) { //插入空表或非空表第一個結點之前 newnode->link = first; //新結點成為第一個結點 if ( first == NULL ) last = newnode; //原為空表時,表尾指針指向這個新結點 first = newnode; } else { //插入在鏈表的中間或尾部 newnode->link = p->link; if ( p->link == NULL ) last = newnode; p->link = newnode; } return 1; //正常插入,函數返回1 } int List::Remove ( int i ) { //將鏈表中的第i個元素刪去, 通過函數返回該元素。若i不合理, 則返回NULL。 if ( i < 0 ) { cout << "Invalid position for Deletion!\n"; return 0;} //不能刪除, 函數返回0 ListNode *p = first, *q; int k = 0; while ( p != NULL && k< i-1 ) { p = p->link; k++; } //循鏈找第i-1個結點 if ( p == NULL || p->link == NULL ) { //空表或者鏈短,找不到第i-1個結點 cout << "Invalid position for Deletion!\n"; return 0; //不能刪除, 函數返回0 } if ( i == 0 ) { q = first; p = first = first->link; } //刪第一個結點時,重新拉鏈 else { q = p->link; p->link = q->link; } //刪中間一個結點或尾結點時 if ( q == last ) last = p; //刪表尾結點時, 表尾指針修改 k = q->data; delete q; return k; //取出被刪結點中的數據值 } ostream & operator << ( ostream& os , List & onelist) { ListNode * p = onelist.first; if ( p == NULL ) os << "It is empty"; else while ( p != NULL ) { os << p->data << " " ; p = p->link; } return os; }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -