抽象資料型別(adt):資料物件、資料關係、基本操作
資料結構:
#define maxsize 100
typedef structsqlist;
typedef structsqlist; //順序表型別
l.elem = (elemtype*)malloc(sizeof(elemtype)*maxsize);
線性表l的初始化(引數用引用)
status initlist_sq(sqlist &l)
補充操作//補充操作:
//銷毀線性表l
void destroylist(sqlist &l)
//清空線性表:
void clearlist(sqlist &l)
//求線性表l的長度
int getlength(sqlist l)
//判斷線性表l是否為空
int isempty(sqlist l)
順序表的取值
int getelem(sqlist l, int i, elemtype &e)
順序表的查詢
int locateelem(sqlist l, elemtype e)
return 0; //查詢失敗,返回
}//while 實現
int locateelem(sqlist l, elemtype e)
//演算法2.4 順序表的插入
//演算法2.4 順序表的插入
status listinsert_sq(sqlist &l, int i, elemtype e)
//演算法2.5 順序表的刪除
status listdelete sq(sqlist &l, int i)
//演算法2.6 單鏈表的初始化
typedef struct lnodelnode, *linklist;
linklist l;
lnode *p, *s;
p = l; //p指向頭結點
s = l->next; //s指向首元結點
p = p->next; //p指向下一結點
status initlist_l(linklist &l)
補充演算法
判斷鍊錶是否為空
//判斷鍊錶是否為空
int listempty(linklist l)
單鏈表的銷毀:銷毀即不存在//單鏈表的銷毀,從頭開始,依次釋放所有結點
status destroylist_l(linklist &l)
return ok;
}
清空鍊錶,鍊錶仍然存在,但是表中無元素,成為空鍊錶
依次釋放所有結點,將頭結點指標域設定為空
//清空鍊錶l
status clearlist(linklist &l)
l->next = null; //頭結點指標域為空
return ok;
}
求單鏈表l的表長//求單鏈表l的表長
int listlength_l(linklist l)
return i;
}
演算法2.7 單鏈表的取值//演算法 2.7單鏈表的取值
status getelem_l(linklist l, int i, elemtype &e)
if(!p || j>i) return error; //第i個元素不存在
e = p->data; //取第i個元素
return ok;
}
演算法2.8 單鏈表的按值查詢//演算法2.8 單鏈表的查詢
lnode *locateelem_l(linklist l, elemtype e)
按值查詢,返回位置序號//按值查詢-根據指定資料獲取該資料位置序號
int locateelem_l(linklist l, elemtype e)
if(p) return j;
else return 0;
}
演算法2.9 單鏈表的插入//演算法2.9 單鏈表的插入
status listinsert_l(linklist &l, int i, elemtype e)
if(!p || j>i-1) return error; //i大於表長+1或者小於1,插入位置非法
s = new lnode; s->data = e; //生成新結點s, 將結點s的資料域置為e
s->next = p->next; //將結點s插入l中
p->next = s;
return ok;
}
演算法2.10 單鏈表的刪除//演算法2.10 單鏈表的刪除
status listdelete_l(linklist &l, int i, elemtype &e)
if(!(p->next) || j > i-1) return error; //刪除位置不合理
q = p->next; //臨時儲存被刪除結點的位址以備釋放
p->next = q->next; //改變刪除結點前驅結點的指標域
e = q->data; //儲存刪除結點的資料域
delete q; //釋放刪除結點的空間
return ok
}
演算法2.11 前插法建立單鏈表//演算法2.11 建立單鏈表:頭插法-元素插入在鍊錶頭部
void creatlist_h(linklist &l, int n)
}
演算法2.12 後插法建立單鏈表//演算法2.12 建立單鏈表:尾插法-元素插入在鍊錶尾部
void creatlist_r(linklist &l, int n)
}
帶尾指標迴圈鍊錶的合併//帶尾指標迴圈鍊錶的合併
linklist connect(linklist ta, linklist tb)
//雙向鍊錶的結構定義
typedef struct dulnodedulnode, *dulinklist
//演算法2.13 雙向鍊錶的插入
void listinsert_dul(dulinklist &l, int i, elemtype e)
//演算法2.14 雙向鍊錶的刪除
void listdelete_dul(dulink &l, int i, elemtype &e)
資料結構 線性表的基本概念
liner list 線性結構。線性表是由同一型別的資料元素構成的線性結構。實際中,考生資訊表 字串等都屬於線性表 線性表通常可表示為 a1,a2,a3,a4,an n為表長,n 0 時為空表 線性表的抽象資料型別 adt list 資料物件 d 資料關係 r 前驅 後繼 資料操作 線性表初始化 l...
C 資料結構基礎,線性表基本概念
資料結構中的基本概念 資料 程式的操作物件,用於描述客觀事物 如 int,float 資料元素 組成資料的基本單位 資料項 乙個資料元素由若干資料項組成 資料物件 性質相同的資料元素的集合 比如 陣列,鍊錶 對於演算法而言,語言不重要,重要的是思想 演算法是為了解決實際問題而設計的 資料結構是演算法...
資料結構導論 2 線性表的基本概念
一 線性結構 是n n 0 個資料元素 也稱結點 的有窮序列。線性結構的基本特徵 若至少含有乙個結點,則除起始結點沒有直接前趨外,其他結點有且僅有乙個直接前趨 除終端節點沒有直接後繼外,其他結點有且僅有乙個直接後繼。二 線性表的定義 線性表是由同一型別的資料元素構成的線性結構。是n n 0 個結點的...