由於c++中煉表節點是由程式設計師動態分配空間及釋放的,所以鍊錶實現集合時就需要析構函式來對不需要使用的物件進行空間的釋放。當進行物件與物件間的複製時有兩種情況,分別是淺層複製和深層複製。
淺層複製可以用類自帶的拷貝建構函式實現,當使用淺層複製時,編譯器自帶的拷貝建構函式只是將目標物件的位址傳給當前物件,所以兩個物件指向的是同乙個記憶體位址。當乙個物件對資料進行操作時同時也意味著改變了另乙個物件的域。
深層複製需要使用者自定義拷貝建構函式。在本例中,由於鍊錶結構在物件生命週期結束後會被析構函式釋放,所以如要進行物件複製,則需要為當前物件的域動態分配空間,然後將目標物件對應的值賦值給當前物件相應的變數。
下例是作業中需要實現的乙個集合類,用鍊錶實現,集合運算採用普通函式的方式。
//
// main.cpp
// cppcp4_2
//// created by chenjun xiong on 2017/3/30.
////集合運算(鍊錶實現)
////題目描述
//請設計實現集合類,元素型別為整形, 集合採用帶頭結點單鏈表表示。該集合類支援集合元素增加、刪除、查詢;並支援集合並、交、差運算(作為類成員函式);利用你設計的集合類,實現本題要求。程式應體現物件導向程式設計思想,結構合理。為保證結果唯一,集合元素遞增排列。如需用到拷貝構造和賦值應過載. 空間應正確釋放.。要求並、交、差運算結果先儲存在集合物件內,再利用集合顯示功能顯示。
////輸入描述
//開始為兩個正整數m,n;後續m個整數構成集合a,再後續n個整數構成集合b
////輸出描述
//集合a、b和他們的並、交、差集;每個集合元素間以,分隔;不同集合顯示在不同行
////輸入樣例
//3 5
//1 2 3
//3 5 8 2 1
////輸出樣例
////
////
//{}
#include
using namespace std;
typedef
struct vnode*node;
class vector;
vector::vector()
vector::vector(const vector &rpt)
}void vector::insert(int ele)
if(eledata)else
while(p->next!=null)else
if(elenext->data)
}p->next=n;
n->next=null;
this->size++;
return ;
}void vector::delete(int ele)else
while(p->next!=null)
}return;//no ele found, exit
}int vector::getelement(int pos)constelse
if(p==pos)
}return
null;
}bool vector::existelement(int ele)constelse
}return
false;
}bool vector::isempty()const
void vector::print()constelse"
}while(n!=null)
cout<<"}"
}void vector::union(vector &b,vector &c)
n=b.head;
m=c.head;
while(n!=null&&m!=null)else
if(n->data==m->data)else
if(m->datadata)
}while(n!=null)
while(m!=null)
}void vector::difference(vector &b,vector &c)
n=b.head;
while(n!=null)
}void vector::intersection(vector &b,vector &c)
n=b.head;
while(n!=null)
}vector::~vector()
}int main()
while(m--)
a.print();
b.print();
c.union(a,b);
c.print();
c.intersection(a,b);
c.print();
c.difference(a,b);
c.print();
}}
鍊錶的C語言實現之迴圈鍊錶及雙向鍊錶
一 迴圈鍊錶 迴圈鍊錶是與單鏈表一樣,是一種鏈式的儲存結構,所不同的是,迴圈鍊錶的最後乙個結點的指標是指向該迴圈鍊錶的第乙個結點或者表頭結點,從而構成乙個環形的鏈。迴圈鍊錶的運算與單鏈表的運算基本一致。所不同的有以下幾點 1 在建立乙個迴圈鍊錶時,必須使其最後乙個結點的指標指向表頭結點,而不是象單鏈...
資料結構之鍊錶 鍊錶實現及常用操作 C 篇
單向鍊錶的節點包括 資料域 用於儲存資料元素的值。struct node 雙向鍊錶的節點包括 資料域 用於儲存資料元素的值。struct dnode p節點後插入值為i的節點 void insertnode node p,int i 當需要刪除乙個節點p時,只需要將p的前乙個節點的next賦為p n...
資料結構之鍊錶 鍊錶實現及常用操作 C 篇
單向鍊錶的節點包括 資料域 用於儲存資料元素的值。struct node 雙向鍊錶的節點包括 資料域 用於儲存資料元素的值。struct dnode p節點後插入值為i的節點 void insertnode node p,int i 當需要刪除乙個節點p時,只需要將p的前乙個節點的next賦為p n...