資料結構 c 線性表 順序表和鏈式表

2021-07-11 05:55:38 字數 1644 閱讀 9373

因為已經大三下學期,準備暑假找實習,以前學得渣,這段時間惡補下基礎!!資料結構和演算法搞起

線性表包括順序儲存和鏈式儲存兩種形式。

首先定義巨集,為線性表分配初始記憶體空間和再分配用

定義結構體,內部定義指標作為線性表的基址,動態分配後就可以用下標訪問,跟陣列一樣,陣列a[10],a是指向第乙個元素的指標,

#define list_init_size 100    //首次分配的空間大小  

#define listincrement 10 //每次再分配增加的儲存空間

typedef structsqlist;

宣告乙個插入的函式,比較有代表性,其他操作就省略了。。

第乙個引數傳入sqlist型別的引用,在函式操作中需修改變數值!

void listinsert_sq(sqlist &l,int i,char e);
主函式首先宣告sqlist型別的變數,動態分配100個char型變數的記憶體空間,返回基址給elem,接著賦值length,listsize,初始化搞定。

main()
插入操作函式實現:

void listinsert_sq(sqlist &l,int i,char e)

char *p,*q;

p = &(l.elem[i - 1]);

for(q = &(l.elem[l.length - 1]); p <= q; q--)

*p = e;

l.length ++;

}

執行結果:順序表各元素在物理上也相鄰,優點是能靠下標隨機訪問,缺點是刪除增加乙個元素都是移動後面所有元素。

#include #include #include typedef struct lnodelnode,*linklist;    //lnode是型別,linklist是指標型別,可用以宣告lnode型別的指標變數
宣告插入操作函式,有代表性

void listinsert_l(linklist &l,int i,char e);  //傳指標型別進來,又可能修改頭結點值,傳引用
結構體指標可用->符號訪問結構體的內部元素,p->data等價於(*p).data

null定義在標頭檔案stddef.h中,也能自己定義巨集,c語言沒有空的概念,都是拿乙個值替換

主函式

main()

}

void listinsert_l(linklist &l,int i,char e)//找到第i-1個結點 

if(!p) return; //i值不合法

q = (linklist)malloc(sizeof(lnode));

q->next = p->next;

p->next = q;

q->data = e;

}

執行結果:

刪除操作需要free()釋放結點記憶體空間。

鏈式表跟順序表的優缺點相反,刪除插入方便,但不能隨機訪問。

資料結構 線性表 順序表

豐富了前邊的功能,更加完善。include include define list init size 100 線性表儲存空間的初始分配量 define listincrement 10 線性表儲存空間的分配增量 using namespace std const int overflow 2 ty...

資料結構 線性表 順序表

線性表是具有相同特性的資料元素的乙個有限序列。線性表的順序儲存結構是,把線性表中的所有元素按照其邏輯順序依次儲存到從計算機儲存器中指定的儲存位置開始的一塊連續的儲存空間。include include include define maxsize 50 using namespace std 假設l...

資料結構 線性表(順序表)

順序表就是把線性表中的所有元素按照其邏輯順序,依次儲存到從指定的儲存位置開始的一塊連續的儲存空間中。這樣線性表中第乙個元素的儲存位置就是指定的儲存位置,第i 1個元素的儲存位置緊接在第i個元素的儲存位置的後面。順序表就像如下圖中的房子,每個房間左邊的數字就是該房間離0點的距離,同時也代表了房間號,房...