資料儲存(鍊錶與陣列)

2021-09-12 17:23:04 字數 2702 閱讀 9553

資料存放在記憶體中,在記憶體中的組織形式只有兩種:

衡量乙個演算法是否優越:

int a[100];//就是在記憶體中申請100個連續的sizeof(int)空間

int *p = (int *)malloc(100xsizeof(int));//在堆空間中申請100個連續的int空間

對空間進行訪問:得到第10個成員,則a[9],o(1)的成員訪問時間(這裡o(1)指的是時間複雜度,代表固定的時間,與變數無關)。

如果要在這100個空間中插入/刪除乙個數,需將後面所有的成員後移/前移。所以陣列一般不會去新增或刪除成員,其最大的優點是可以一次性訪問某個成員,借助了陣列下標的優越性。

要得出1~127這些範圍中某個數的二進位制編碼中,從低位開始,第一次出現1的bit位編號。

例如:3——>0000 0011——>bit0   4——>0000 0100——>bit2

乙個比較簡單的方法:

如果data&0x01 == 1 ,已經找到這個bit位號了

否則data>>1,迴圈檢測

雖然最多檢測8次,但是我們仍然沒有辦法固定得到這個值的具體時間。

可以構建乙個表:a[127] = 

隨便輸入乙個1~127之間的數n,可直接得到結果為a[n]。這樣就能夠在確定的時間內得到期望的結果。缺點是要事先構建表,占用記憶體空間。

//在頭部新增

linkslitp insert_head(linklistp head,linklistp newnode)

//在尾部新增

linklistp insert_tail(linklistp head,linklistp newnode)

else

temp->next = newnode;

newnode->next = null;

}return head;

}//在中間某個位置新增

linklistp insert_local(linklistp head,linklistp newnode,int data)

linklistp prev = head;

temp = head->next;

while (temp != null && data != temp->data)

prev->next = newnode;

newnode->next = temp;

return head;

}//刪除鍊錶中的某個結點

linklistp delnode(linklistp head, int data)

linklistp prev = head;

temp = head->next;

while (temp!=null && temp->data != data)

if (temp == null)

return null;

prev->next = temp->next;

free(temp);

return head;

}//輸出函式

void output(linklistp head)

printf("\n");

}int main()

; for(int i=0;i<10;i++)

//在鍊錶某個位置插入

int data;

linklistp newnode2 = (linklistp)malloc(sizeof(linknode));

newnode2->data = 66;

printf("pls input need insert data:");

scanf_s("%d", &data);

linklistp result1 = insert_local(head, newnode2, data);

if (result1 == null)

printf("del failure or not has this node \n");

else

output(result1);

//刪除鍊錶中某個結點

陣列與鍊錶

陣列和鍊錶簡介 在計算機中要對給定的資料集進行若干處理,首要任務是把資料集的一部分 當資料量非常大時,可能只能一部 分一部分地讀取資料到記憶體中來處理 或全部儲存到記憶體中,然後再對記憶體中的資料進行各種處理。例如,對於資料集 s,要求 s 中元素的和,首先要把資料儲存到記憶體中,然後再將記憶體中的...

陣列與鍊錶

陣列,在記憶體上給出了連續的空間.鍊錶,記憶體位址上可以是不連續的,每個鍊錶的節點包括原來的記憶體和下乙個節點的資訊 單向的乙個,雙向鍊錶的話,會有兩個 優點 使用方便 查詢效率 比煉表高,記憶體為一連續的區域 缺點 大小固定,不適合動態儲存,不方便動態新增 優點 可動態新增刪除 大小可變 缺點 只...

陣列與鍊錶

使用陣列意味著所有待辦事項在記憶體中都是相連的 緊靠在一起的 所以在陣列中新增新元素也可能很麻煩。如果沒有了空間,就得移到記憶體的其他地方,因此新增新元素的速度會很慢。一種解決之道是 預留座位 即便當前只有3個待辦事項,也請計算機提供10個位置,以防需要新增待辦事項。這樣,只要待辦事項不超過10個,...