程式設計基礎: 資料結構 演算法
//順序儲存結構的結構**:
#define maxsize 20//儲存空間的起始分配量
typedef int elemtype;//elemtype型別根據實際型別而定,這裡假設是int
typedef structsqlist;
//順序儲存結構需要三個屬性:
//1儲存空間的起始位置:陣列data,它的儲存位置就是儲存空間的儲存位置;
//2最大儲存量:maxsize
//3線性表當前長度
在順序儲存結構中第i個資料元素ai的儲存位置與ai的儲存位置的關係
loc(ai)=loc(ai)+(i-1)*c;
stattus listinsert(sqlist *l,int i,elemtype e)
l->data[i-1]=e;
l->length++;
return ok;
}
時間複雜度 o(n);
status listdlete(sqlist *l,int i,elemtype *e)
l->length--;
return ok;
}
時間複雜度o(n)
//線性表的單鏈表的鏈式儲存結構
typedef struct node//結點的定義
node;
typedof struct node *linklist;//定義單鏈表
status getelem(linklist l,int i,elemtype *e)
if(!p||j>i)
return error;/第i個節點不存在
*e =p->data;
return ok;
}時間複雜度o(n)
status listinsert(linkelist *l,int i,elemtype e)
if(!p||j>1)
return error;
s=(linklist)malloc(sizeof(node));
s->data=e;
s->next=p->next;//注意賦值 的順序,先賦值s->next然後再賦值p->next;
p->next=s;
return ok;
}
時間複雜度o(n);
status listdelete(linklist *l,int i,elemtype *e)
if(!(p->next)||j>i)
return error;//第i個結點不存在
q=p->next;
p->next=q->next;
*e=q->data;//將q結點的資料給*e
free(q);
return ok;
}
時間複雜度:o(n);
頭插法:
void createlisthead(linklist *l,int n)
}尾插法
void createlisttail(linklist *l,int n)
r->next=null;//表示當前表結束
}
status clearlist(linklist *l)
(*l)->next=null;//頭結點的指標域為空
return ok;
//陣列第乙個和最後乙個元素特殊處理,不存資料,第乙個元素的cur存備用鍊錶的第乙個結點的小標,最後乙個元素的cur存第乙個有元素的下標,相當於頭結點
#define maxsize 1000
typedef struct
component,staticlinklist[maxsize];
//將一維陣列space中各分量鏈成一備用鍊錶
//space[0].cur為頭指標,「0」表示空指標
status initlist(staticlinklist space)
return error;
}
//刪除在l中的第i個元素
status listdelele(staticlinklist l,int i)
void free_ssl(staticlinklist space ,int k)
int listlength(staticlinklist l)
return j;
}
單迴圈鍊錶:將單鏈表中的終端結點的指標端由空指標改為指向頭結點,單迴圈鍊錶簡稱迴圈鍊錶
雙向鍊錶:在單鏈表的每個結點中再設定乙個指向其前驅結點的指標(雙向鍊錶也可以是迴圈鍊錶)
typedef struct dulnode
dulnode,*dullinklist;
雙向鍊錶的插入操作:
//在p和p->next之間插入結點e
s->prior=p;
s->next=p->next;
p->next->prior=s;
p->next=s;
雙向鍊錶的刪除操作:
//刪除p結點
p->prior->next=p->next;
p->next->prior=p->prior;
free(p);
線性表分為順序儲存結構和鏈式儲存結構
鏈式儲存結構又分為單鏈表,靜態鍊錶,迴圈鍊錶,雙向鍊錶
大話資料結構讀書筆記系列(三)線性表
線性表 list 零個或多個資料元素的有限序列。元素之間是有順序的,若元素存在多個,則第乙個元素無前驅,最後乙個元素無後繼,其他每個元素都有且只有乙個前驅和後繼。線性表強調是有限的 在較複雜的線性表中,乙個資料元素可以由若干個資料項組成。線性表的順序儲存結構,指的是用一段位址連續的儲存單元依次儲存線...
大話資料結構筆記 線性表
線性表 list 零個或多個資料元素的有限序列。重點 有順序 有限 例如有乙個線性表 a,b,c,d,z則 所有線性表元素的個數n n 0 為線性表的長度,n 0時,為空表。在複雜的線性表中,乙個資料元素可以是若干個資料項組成,例如花名冊。線性表的資料儲存結構,指的是用一段位址連續的儲存單元依次儲存...
讀書筆記 大話資料結構 1
對於電腦科學,資料結構的重要性不言而喻。它對於乙個程式設計師的功力的提高起著關鍵的作用。勿在浮沙築高台,想要成為一名合格的hacker。基礎理論決定乙個程式設計師思維的深度。介於此,決定認真學習資料結構,找到比較基礎易懂的大話資料結構來開始我的學習之旅。資料結構 相互之間存在一種或多種特定關係的資料...