/*線性表的定義與操作---鏈式表*/
/*定義狀態標記*/
#define ok 1
#define error 0
typedef int status;/*定義程式返回狀態值*/
typedef int elemtype;/*定義元素型別*/
/*定義乙個表結點*/
typedef struct lnodenode,*
list;
/* 初始化順序線性表 */
/*建立乙個帶有頭結點的空鍊錶*/
status initlist(list
*l) (*l)->next=
null; /* 指標域為空 */
return ok;
}/*求表長 */
int listlength(list l)
return j;
}/*查詢:
1.按序號查詢 用e返回l中第i個資料元素的值 */
status getelem(elemtype *e,list l,int i)
if(!p || j>i)/*第i個結點不存在*/
return error;
*e = p->
data;/*取第i個結點中資料*/
return ok;
}/*查詢:
2.按資料元素查詢,並返回該結點*/
list getelem(elemtype e,list l)
/*單鏈表第i個資料插入結點的演算法思路:
*1.宣告一結點p指向鍊錶第乙個結點,初始化j從1開始;
*2.當j < i時,就遍歷鍊錶,讓p的指標向後移動,不斷指向下一結點,j累加1;
*3.若到鍊錶末尾p為空,則說明第i個元素不存在;
*4.否則查詢成功,在系統中生成乙個空結點s;
*5.將資料元素e賦值給s->data;
*6.單鏈表的插入標準語句s->next=p->next; p->next=s;
*7.返回成功。
*//*帶頭結點的插入:
*初始條件:l已經存在,且1=status listinsert(elemtype e,int i,list
*l) else
if(p==
null
|| j>i-
1)/*第i-1個結點不存在,不能插入*/
return error;
q = (list)malloc(sizeof(node));
q->
data
= e; /*申請填裝新結點*/
q->next = p->next;
p->next = q;/*新結點插入在第i-1個結點的後面*/
return ok;
}}/*帶頭結點的刪除:
刪除l中的第i個結點,並用e返回其值,l的長度減1*/
/**********************************
*單鏈表刪除第i個資料結點的演算法思路:
*宣告一結點p指向鍊錶第乙個結點,初始化j從1開始;
*當j < i時,就遍歷鍊錶,讓p的指標向後移動,不斷指向下乙個結點,j累加 1;
*若到鍊錶末尾p為空,則說明第i個元素不存在;
*否則查詢成功,將欲刪除的結點p->next賦值給q;
*單鏈表的刪除標準語句p->next=q->next;
*將q結點中的資料賦值給e,作為返回;
*釋放q結點;
*返回成功。
**********************************/
status listdelete(list
*l,int i)
else
if(p ==
null
|| j>i-
1)/*判斷第i-1個結點是否存在*/
return error;
q = p->next;/*q指向第i個結點*/
if(q ==
null) /*判斷第i個結點是否存在*/
return error;
p->next = q->next;/*從鍊錶中刪除 */
free(q);/*釋放被刪除的結點*/
return ok;
}}
鏈式線性表
2013 03 23 00 14 39 上學期的時候就大致看了資料結構與演算法分析的了,但感覺收穫比較少,總結原因是程式設計實踐少了,所以今年趁著老師上課,就多進行一些 的實踐,也準備拿一些acm的題目來練練。中午的時候就將鏈式表的 打了一遍,現在貼上來分享。為了節省時間,我的注釋也相對較少,有不懂...
線性表的定義與操作
線性表的定義與操作 順序表 typedef int position typedef struct lnode list struct lnode 初始化 list makeempty 查詢 define error 1 position find list l,elementtype x 插入 b...
線性表定義與操作 順序表
typedef int position typedef struct lnode list struct lnode 初始化list makeempty 查詢 define error 1 position find list l,elementtype x 插入bool insert list ...