定義:儲存和組織資料的方式
演算法對資料進行處理–>四大基本操作(增 刪 查 改)
根據資料之間的邏輯結構將資料分為以下幾種關係:
1.5資料間的儲存結構
順序表:
鍊錶/雙鏈表
棧和佇列
在實現對陣列的操作之前:
已經預先定義如下結構體變數
typedef
struct list
list;
對結構體變數進行預處理,預處理的過程實際是將順序表的長度初始化為0,包括靜態陣列和動態陣列的初始化
void
init
(list *p)
3.1增的**實現
如果順序表還沒有任何資料的情況下,增加資料的**為:
void
insertnumber1
(list* p,
int data)
如果順序表已經有資料,在順序表的尾部插入資料,**為
void
insertnumber2
(list *p,
int data)
3.如果順序表已經有資料,需要在順序表中間插入,則需要將後面的元素後移,**為
void
insertnumber3
(list *p,
int num,
int data)
//假設num為將要插入的位置
//將num位置及其後的資料向後移動
arr[i]
=data;
p->len++
;//將線性表的長度擴大
}
3.2刪的**實現
線性表刪除元素的方式是通過將要刪除的位置n1,用後面位置n2來代替,後面依次向前挪動
void
deledata
(list* p,
int data)
p->len-1;
break;}
}}
順序表中的查、改操作比較簡單,此處略
3.3查的**實現
3.4改的**實現
查詢如果是有序陣列,那麼可以通過多種方法進行查詢,如果是無序的則只能乙個乙個查詢
#include
#include
#include
typedef
struct list
list;
//順序表初始化,對順序表進行操作
void
init
(list *p)
;//實現插入功能的函式
void
insertdata
(list*p,
int data)
;//實現刪除乙個數字功能的函式
void
deledata
(list *p,
int data)
;//實現刪除所有重複數字功能的函式
void
deledata1
(list *p,
int data)
;//實現查詢功能
void
finddata
(list *p,
int data)
;int
main()
//賦值
for(
int i =
0; i < mylist1.len;
++i)
//輸出
printf
("\n\n以下輸出用來說明對一組數進行刪除數字10的操作:\n");
list mylist2;
//準備乙個順序表
init
(&mylist2)
;for
(int i =
0; i <80;
++i)
printf
("原始陣列內容為:\n");
for(
int i =
0; i < mylist2.len;
++i)
deledata
(&mylist2,10)
;printf
("\n刪除數字10 之後的陣列為:\n");
for(
int i =
0; i < mylist2.len;
++i)
printf
("\n\n以下輸出用來說明對一組數進行刪除重複數字10的操作:\n");
list mylist3;
//準備乙個順序表
init
(&mylist3)
;for
(int i =
0; i <80;
++i)
printf
("原始陣列內容為:\n");
for(
int i =
0; i < mylist3.len;
++i)
deledata1
(&mylist3,10)
;printf
("\n刪除數字10 之後的陣列為:\n");
for(
int i =
0; i < mylist3.len;
++i)
printf
("\n\n以下內容用來查詢值為3在這個陣列中是否存在:\n");
//查詢mylist3中數字為3的值
finddata
(&mylist3,3)
;getchar()
;return0;
}void
init
(list *p)
void
insertdata
(list*p,
int data)
p->arr[i]
= data;
p->len++
;#endif
}//刪除元素不是正常想象的直接刪除,而是將要刪除元素的位置用後面元素替代
void
deledata
(list *p,
int data)
p->len--
;//刪除之後元素個數-1
break;}
}}//用於刪除全部的重複數字
void
deledata1
(list *p,
int data)
p->len--
;//刪除之後元素個數-1
--i;
//break;}}
}//用於查詢該陣列中數字為3的值
void
finddata
(list *p,
int data)
}}
順序表初級
增刪改查 防止標頭檔案重複包含的時候重定義 因為結構體的定義 一般寫在標頭檔案中的 ifndef sxb h define sxb h struct student typedef student data struct sxb sxb createsxb 建立 bool insertsxb sxb...
C初級 雙向鍊錶
雙鏈表的頭head能找到下乙個節點a,節點a不能訪問頭head 對於鍊錶中指標指向問題的說明 1.在定義結構體b時,在結構體內部定義了乙個指向上一位置a的指標 也定義了指向下一位置的指標c 在 中,一般將head next c head b head pre a 2.在進行插入操作時,有結構體指標p...
c 初級 之 反轉鍊錶
以下為例 反轉乙個鍊錶 include includeusing namespace std struct link int main 以下是面向過程的思想,仍是c的思想,先做什麼再做什麼 最好寫乙個鍊錶的類,把這些操作都封裝起來,例項化物件後可以隨用隨調,安全性也更好,這就是物件導向了。p2 da...