?? 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 + -