結構體基本格式
struct tags1; //結構體變數
例1. 宣告結構體並註明成員,有變數無標籤
structs1; //宣告乙個結構體變數名字叫s1,如果還要使用相同的結構體型別,需要重新再宣告一次
例2.宣告結構體並註明成員,有標籤,無變數,與例1相比,能夠多次宣告
struct ******;
struct ****** s2; //宣告乙個結構體名字叫s2
struct ****** s3[2]; //宣告乙個結構體陣列,每個陣列空間中都存著的是乙個******型別的結構體
struct ****** *s4; //宣告乙個結構體指標s4,指標s4可以指向乙個******型別的結構體
例3.用typedef定義新的型別
typedef struct******2;
******2 u1; //宣告乙個******2型別的變數u1
******2 u2[2]; //宣告乙個******2型別的結構體陣列u2
******2 *u3; //宣告乙個******2型別的指標u3
順序表的分配方式分為兩種,即靜態分配和動態分配,靜態分配顧名思義是一次分配空間後不能再對空間進行改變,這種方式除了可能會造成空間不足的情況也可能會導致空間的巨大浪費,因為我們往往難以估計我們在使用的過程中到底要用到多大的空間。
靜態分配結構體
typedef struct sqlist;
動態分配結構體
typedef struct sqlist;
用法:sqlist l;
l.data=(elemtype *) malloc(sizeof(elemtype)*initsize) //擴充空間
//說明:
1.malloc函式本身的返回值為空值,因此這裡需要將其強制轉化為elemtype型別
2.initsize是宣告好的已知int型常量,表示每次擴充的空間數
3.sizeof函式用於計算某型別所佔實際空間的大小
靜態分配和動態分配的區別:
靜態一次分配,分完了就完了,資料存不了就溢位
動態多次分配,在不超過總容量的情況下,記憶體不夠可以繼續開闢,這樣能最大限度的節約記憶體空間。
在順序表中增加乙個元素(預設插入乙個不超過當前的儲存空間的最大長度)
思想:將第6個位置以後的元素(包括第6個位置)依次後移乙個位置
(1)**(在第6個位置(5和7)之間插入乙個6)
(2)**演示
bool insert(&l,int i,elemtype e)
if(l.length>l.maxsize)
for(int j=l.length+1;j>=i;j--)
l.data[i]=e; //插入元素e
l.length ++; //線性表總長度+1
return true;
}//說明:
1.函式傳入l的時候傳入的是l的位址(&l),這是因為我們的操作改變了l本身
在順序表中刪除乙個元素思想:將第6個位置以後的元素(包括第6個位置)依次前移乙個位置
(1)**(刪除第6個位置的元素(刪除7))
(2**演示)
bool delete(&l,int i,elemtype &e)
e=l.data[i]; //儲存要刪除的元素的值
for(int j=i;j
l.length --; //順序表的總長度減一(因為刪除了乙個元素)
return true;
}
int find(sqlist l,elemtype e)
}return 0;
}說明:
**中傳入的線性表l傳的是值而不是位址,這是因為查詢元素沒有改變線性表
C語言資料結構 順序表
資料結構的一些講解,供學習者參考,也順帶作為複習 線性表的順序儲存是指在記憶體中用位址連續的一塊儲存空間順序存放線性表的各元素,用這種儲存形式儲存的線性表稱為順序表。因為記憶體中的位址空間是線性的,因此,用物理上的相鄰實現資料元素之間的邏輯相鄰關係既是簡單又自然的。將資料儲存區data和指標last...
資料結構 順序表(C語言)
seqlist.h include include define maxsize 100 typedef struct seqlisttype void seqlistinit seqlisttype sl 初始化順序表 int seqlistlength seqlisttype sl 返回順序表的...
順序表 c語言資料結構
最近才學的資料結構,自己寫出來順序表求大神指點指點有沒有優化的地方 增 刪 改 查 github上有原始碼 github源 標頭檔案 pragma once include include typedef int sdatatype typedef struct seqlist seqlist 初始...