資料結構三要素:邏輯、物理、資料的運算
邏輯結構:集合、線性、樹型、網狀(圖形)
儲存結構:順序、鏈式、索引、雜湊
資料結構的運算:
- a.原子型別:不可再分的型別。(bool,int)
- b.結構型別:可分解的型別(struct)
- c.抽象資料型別:定義了乙個資料結構
演算法的特性:
定義:具有相同資料型別的n個資料元素的有限序列.n為表長,若n=0,則線性表為空表;i為表的位序(從1開始)
a1為線性表的表頭;an為線性表的表尾,除表頭元素,表中每個元素有且僅有乙個直接前驅,除表尾元素,表中每個元素有且僅有乙個直接後繼
線性表的特點:
優點:可隨機訪問,儲存密度高
缺點:要求大片連續空間,改變容量不方便
用順序儲存實現的線性表
//靜態表
#include using namespace std;
#define maxsize 10
typedef structseqlist;//靜態列表
void initlist(seqlist &l)//靜態列表初始化
void listinsert(seqlist &l,int i,int e)//插入操作
void listdelete(seqlist &l,int i int &e)//刪除操作
void getelem(seqlist l,int i)//按位查詢
void getvalue(seqlist l,int i,int e)seqlist;//定義線性表
void initlist(seqlist &l)//初始化動態表
//其餘操作與靜態表相似
int main()
2.2.1單鏈表
定義:用鏈式儲存的方式實現了線性的結構。結點(資料結構+指標)
優點:不要求大片連續空間,改變容量方便
缺點:不可隨機訪問,要消耗一定空間存放指標
//不帶頭節點
#include using namespace std;
typedef struct lnodelnode,*linklist;
bool initlist(linklist &l)
bool empty(linklist l)
void test()
//帶頭結點
bool initlist(linklist &l)
bool empty(linklist l)
帶頭結點——按位插入
bool insertnextnode(lnode *p,elemtype e)//後插操作
bool listinsert(listnode &l,int i ,elemptype e)
return insertnextnode(p,e);//結點p後插入資料
}
不帶頭結點
bool listinsert(listnode &l,int i ,elemptype e)
lnode *p;//指標掃瞄當前節點
int j=1;//當前p指向的結點
p=l;//l指向頭結點,頭結點是第0個結點(不存放資料)
while (p!=null && jnext;
j++;
} return insertnextnode(p,e);
}
//前插操作
bool insertpriornode(lnode *p,elemtype)
//刪除操作-按位刪除(帶頭結點)
bool listdelete(linklist &l,int i,elemtype &e)
if (p==null)
return false;
lnode *q=p->next;
e=q->data;//返回刪除的值
p->next=q->next;
free(q);
return true;
}
刪除制定節點p,但是刪除表尾元素會導致空指標
bool insertpriornode(lnode *p,elemtype)
//按位查詢
lnode * getelem(linklist l,int i)
return p;
}
2.2.2雙鏈表
相比單鏈表,多了乙個指向前驅元素的指標,在修改時也要注意修改前驅元素指標
//簡單舉例
bool deletenode(lnode *p)
//刪除操作簡單思路
//刪除p的後繼結點q
if (p==null) return false;
if (q==null) return false;
p->next=q->next;//q結點指向的指標讓p結點指定
if(q->next !=null)
q->next->prio=p;//q結點後的前指標,指向p,使得q沒有被任何結點指向
free(q);//釋放q空間
2.2.3迴圈單鏈表/迴圈雙鏈表
在其**邏輯上與單/雙鏈表毫無區別,主要不同表現在二者表尾/表頭或這前驅插入時,在刪除時也要將表尾指向表頭的指標進行修改
2.2.4靜態鍊錶
#define maxsize 10
typedef struct slinklist[maxsize];
思路:初始化時,頭結點的指標指向-1,其餘的next指向-2;
插入/刪除,修改next指標
順序表:隨機訪問,儲存密度大,大片連續分配空間不方便,改變容量不便
銷毀:靜態分配:系統自動**
動態分配:手動(free)
鏈式表:改變容量方便,不可隨機訪問,儲存密度低
開放式答題模版:
1.順序表與鍊錶的邏輯結構都是線性結構,都屬於線性表
2.但是二者儲存結構不同,順序表採用順序儲存(優點、缺點 ),鍊錶採用鏈式儲存(優點、缺點)
3.由於採用不同的儲存結構,基礎操作實現的效率也有所不同
鏈式線性表和順序線性表
在這裡插入 片 線性表的儲存結構 typedef struct seqlist typedef struct seqlist 順序表基本操作 初始化順序表在這裡插入 片 intseqlist init seqlist list,int size 插入資料元素在這裡插入 片 intseqlist in...
線性表演算法題庫 線性表習題
鍊錶。若指標p指向某結點時,能夠根據該指標找到其直接後繼,能夠順後繼指標鏈找到p結點後的結點。但是由於不知道其頭指標,所以無法訪問到p指標指向的結點的直接前趨。因此無法刪去該結點。2.雙鏈表。由於這樣的鍊錶提供雙向指標,根據p結點的前趨指標和後繼指標可以查詢到其直接前趨和直接後繼,從而可以刪除該結點...
刪除線性表節點 線性表
submit 81 solved 66 submit status web board 已知長度為n的線性表a採用順序儲存結構,請寫一時間複雜度為0 n 空間複雜度為0 1 的演算法,該演算法刪除線性表中所有值為item的資料元素。o 1 表示演算法的輔助空間為常量 輸入 n 6 輸入資料 1 2 ...