1.陣列:連續的儲存空間,相同的資料型別的資料
陣列隨機訪問的時間複雜度為o(1),刪除,插入的時間複雜度為o(n);
插入:如果在陣列的末尾插入元素,時間複雜度為o(1);如果在陣列的頭元素位置插入資料,時間複雜度為o(n);如果在其他位置k插入元素,時間複雜度為o(k);
刪除:如果在陣列的末尾刪除元素,時間複雜度為o(1);如果在陣列的頭元素位置刪除資料,時間複雜度為o(n);如果在其他位置k刪除元素,時間複雜度為o(k);
相關**如下:
在陣列的末尾插入元素
data[++last] = item; }
在陣列的其他位置插入元素
void insertitem(int j,int item)
data[i - 1] = item;
++last;
}
刪除元素
int deleteitem(int i)
else
}--last;
return tmp;
}
隨機訪問元素
int getitem(int i)
2.1. 順序表:跟陣列類似
2.2. 單鏈表:鍊錶方向只有前後倆個方向
單鏈表與順序表的、陣列的區別:記憶體不是連續的儲存空間,是靠指標把很多塊兒記憶體空間串起來的,刪除、插入的時間複雜度為o(1),隨機訪問的時間複雜度為o(n);
相關**如下:
public class linklist : ilistds
set
} //構造器
public linklist()
//求單鏈表的長度
public int getlength()
return len;
} //清空單鏈表
public void clear()
//判斷單鏈表是否為空
public bool isempty()
else
} //在單鏈表的末尾新增新元素
p = head;
while (p.next != null)
p.next = q;
} //在單鏈表的第i個結點的位置前插入乙個值為item的結點
public void insert(t item, int i)
if (i == 1)
nodep = head;
noder = new node();
int j = 1;
while (p.next != null&& j < i)
if (j == i)
} //在單鏈表的第i個結點的位置後插入乙個值為item的結點
public void insertpost(t item, int i)
if (i == 1)
nodep = head;
int j = 1;
while (p != null&& j < i)
if (j == i)
} //刪除單鏈表的第i個結點
public t delete(int i)
nodeq = new node();
if (i == 1)
nodep = head;
int j = 1;
while (p.next != null&& j < i)
if (j == i)
else
} //獲得單鏈表的第i個資料元素
public t getelem(int i)
nodep = new node();
p = head;
int j = 1;
while (p.next != null&& j < i)
if (j == i)
else
} //在單鏈表中查詢值為value的結點
public int locate(t value)
nodep = new node();
p = head;
int i = 1;
while (!p.data.equals(value)&& p.next != null)
return i;
} }2.3. 雙向鍊錶:雙向鍊錶的方向是前後方向,但是存在倆個指向,佔記憶體較多,但是訪問速度較快,是一種空間換時間的優化方式。每個節點有倆個指標,分別指向自己的直接前驅,和自己的直接後繼。因此是雙向鍊錶。
敬請期待:::::哈哈哈
表 陣列 鍊錶
陣列 陣列是個表,是個連續儲存的表。在c裡面,首先我們知道陣列容量是固定的,使用前先分配大小,所以使用後就不是很方便調整容量 解決這個問題在c裡面一般是預先估計陣列的大小,然後用雙倍的容量建立陣列,是不是很麻煩?正因為陣列是連續儲存和容量固定,所以注定陣列不方便進行增刪這種改變容量的操作。原因是假如...
陣列模擬鍊錶(靜態鍊錶)
為了模擬鍊錶的操作,設定了乙個date 資料 以及cur 相當於指標域 typedef struct list list s size size為陣列大小 我們用s size 1 cur來起頭指標的作用,指向鍊錶的第乙個元素的下標。因為不能直接malloc出來乙個空間,需要s 0 來儲存乙個空的陣列...
鍊錶 鍊錶環問題總結
給定乙個單鏈表,只給出頭指標h 1 如何判斷是否存在環?2 如何知道環的長度?3 如何找出環的連線點在 4 帶環鍊錶的長度是多少?1 如何判斷是否存在環?對於問題1,使用追趕的方法,設定兩個指標slow fast,從頭指標開始,每次分別前進1步 2步。如存在環,則兩者相遇 如不存在環,fast遇到n...