線性表的鏈式存儲結構
:
鏈式存儲表示
:
typedef struct LNode{
?
?
ElemType
? data;
?
Struct LNode *next;
?
}LNode,*LinkList;
基本操作在鏈表上的實現
:
(1)
??
單鏈表的取元素算法(經典)
Status GetElem_L(LinkList L, int i,ElemType &e)
{
?
p=L->next; j=1;
while(p && j<i)
{
????? p=p->next;++j;
}
if(!p || j>i) return ERROR;
e=p->data;
return OK;
?
}
算法分析
:
基本操作是
:
比較
j
和
I,
并把指針后移
,
循環體執行的次數
,
與被查元素的位置有關
.
假設表長為
n,
如果
1<=i<=n,
那么循環體中語句的執行次數為
i-1.
否則次數為
n
所以時間復雜度為
O(n).
?
?
(2)
??
插入元素算法
Status ListInsert_L(LinkList &L, int i,ElemType e)
{
?
?? p=L;j=0;
?? while(p&&j<i-1)
????? { p=p->next;++j}
?? if(!p || j>i-1)
????? return ERROR;
?
?? s = (LinkList)malloc(sizeof(LNode));
?? s->data = e;
?? s->next = p->next;
?? p->next =s;
?? return OK;
}
(3)
??
刪除元素算法
Status ListDelete_L(LinkList &L, int i,ElemType &e)
{
?? p=L;j=0;
while(p &&j<i-1)
?? {p=p->next;++j}
if(!p ||j>i-1)
????? return? ERROR;
??
q=p->next;
?? p->next =q->next;
?? e =q->data;
?? free(q);
?? return OK;
}
?
算法分析
:
插入和刪除算法
,
都要先找到第
i-1
個節點
,
所以時間復雜度為
O(n);
?
(4)
??
單鏈表的建立算法
?
void CreateList_L(LinkList &L,int n){
?
?L =(LinkList)malloc(sizeof(LNode));
?
?L->next = null;
? for(i = n;i>0;--i){
?
? p =(LinkList)malloc(sizeof(LNode));
? scanf(&p->data);
? p->next = L->next;
? L->next =p;
? }
?
}
算法分析
:
按照逆序循環輸入
n
個數據元素的值
,
建立新節點
.
并插入
.
因此算法的時間復雜度為
O(n).
posted on 2006-06-16 01:04
liulang 閱讀(952)
評論(3) 編輯 收藏