春節學習之從入門到放棄學習 ~~~廢材大學幾年沒學,從頭開始系列02
阿新 • • 發佈:2019-02-09
返回 相同 知識 靜態 定義 == ins color lse
今天還算起的還早,八點差不多就爬了起來了,昨天十點就要睡的,玩了一會手機,又到了十一點啦,只要把手機放到枕頭旁邊肯定會玩的很晚。。。
昨天學完棧,做了做後面的習題,發現前面學的鏈表幾乎全部忘記了233,現實版學了前面忘了後面,連鏈表的概念都有點擠不太清楚了。。。於是今天來把前面鏈表的知識復習一下,要學習鏈表,就不得不講一下前面的線性表
線性表的定義:
線性表是具有相同數據結構n(n>=0)個數據元素的有限序列。其中n為表長,當n=0時,該線性表是一個空表。
線性表可以分為線性存儲-》順序表 和 鏈式存儲-》(單鏈表、雙鏈表、循環鏈表)指針實現、(靜態鏈表)數組實現
線性表的順序存儲又稱為順序表,它是用一組地址連續的存儲單元,依次存儲線性表中的數據元素,從而是得邏輯上相鄰的兩個元素在物理位置上也相鄰。
sizeof(ElemType)是每個數據元素所占用存儲空間的大小
註意:線性表中的元素的位是從1開始的,而數組中元素的下標是從0開始的
#define MaxSize 50 typedef struct { ElemType data[MaxSize]; int length; }SqList;
一維數組可以是靜態分配的,也可以是動態分配的,在靜態分配時,由於數組的大小和空間事先已經固定,一旦空間占滿,再加入新的數據將產生溢出,就會導致程序崩潰。而動態分配時,存儲數組的空間實在程序執行過程中通過動態存儲分配語句分配的,一旦數據空間占滿,可以另外開辟一塊更大的存儲空間,用以替換原來的存儲看空間,從而達到擴充存儲數組空間的目的,而不需要一次性地劃分所有所需空間給線性表。
#define InitSize 100 typedef struct { ElemType *data; int MaxSize,length; } SeqList;
c語言的初始動態分配語句為
L.data=(ElemType*)malloc(sizeof(ElemType)*InitSize);
順序表最主要的特點是隨機訪問,即通過首地址和元素序號可以在O(1)的時間內找到指定元素
順序表上的基本操作的實現
插入操作
bool ListInsert (SqList &L, int i , ElemType e) { // 本算法實現將元素e插入到順序表L中第i個位置 if (i<1|| i>L.length+1) return false; if (L.length>=MaxSize) return false; for(int j=L.length; j>i;j--) L.data[j]=L.data[j-1]; L.data[i-1]=e; L.length++; return true; }
刪除操作
bool ListDelete(SqList &L ,int i , int &e) { //本算法實現刪除順序表L中第i個位置的元素 if(i<1 || i>L.length) return false; e=L.data[i-1]; for(int j=i; j<L.length; j++) L.data[j-1]=L.data[j]; L.length--; return true; }
按值查找
int LocateElem(SqList L, ElemType e) { //本算法實現查找順序表中值為e的元素,吐過查找成功,返回元素位序 int i; for(i=0;i<L.length;i++) if(L.data[i]==e) return i+1; return 0; }
春節學習之從入門到放棄學習 ~~~廢材大學幾年沒學,從頭開始系列02