順序結構的缺點還是蠻大的,現在來看看單鏈表的插入與刪除。
單鏈表中,在c語言可以用結構體指標描述:
typedef struct node
node;
typedef struct node * linklist
有一點很重要
比如我隨便畫乙個。。
千萬別也成
p->next=s;s->netx=p->next;
正確的是
s->netx=p->next;p->next=s;
自己好好想想,不打了。記得是逆序就行了~
好,進入正題,單鏈表第i個資料插入節點的演算法思路:
1.宣告一節點p指向鍊錶第乙個結點,初始化j從1開始;
2.當j3.若到鍊錶末尾p為空,則說明第i個元素不存在;
4.否則查詢成功,在系統中生成乙個空節點s;
5.將資料元素e賦給s->data;
6.單鏈表插入標準語句s->next=p->next;p->next=s;
7.返回成功。
實現**演算法如下:
//在l中第i個位置之前插入新的資料元素e,l的長度加1
int listinsert(linklist *l,int i,elmetype e)
if(!p || j>=1)
return error;
s = (linklist)malloc(sizeof(node)); //生成新節點
s->data = e;
s->next = p->next;
p->next = s; //順序絕對不變
return ok;
}
如何刪除呢?其實只要q=p->next;p->next->q->next;
演算法思路省略,直接給出**:
//刪除l第i個元素,並用e返回其值,l的長度減1
int listinsert(linklist *l,int i,elmetype e)
if(!(p->next) || j>=1)
return error;
q = p->next;
p->next = q->next;
*e = q->data;
free(q); //釋放記憶體
return ok;
}
單鏈表插入與刪除演算法
include include typedef char datatype typedef struct node linklist linklist initlist linklist head linklist createlist linklist head,int n head next n...
單鏈表插入刪除
在鍊錶的插入刪除操作上理解起來比順序表更為容易,其不需要變動在i位置前的所有的元素,只需要修改節點指標即可。插入 設在鍊錶的i位置插入新元素,設i 1節點的指標域為p,設插入的節點指標域為s,所以插入操作應該為 s next p next 將s的字尾改為p的字尾,p的字尾是原來的第i個點的指標域,將...
單鏈表的插入刪除
include using namespace std struct lnode void creat link lnode head head指標的引用,lnode head 傳遞的是指標,但是對於指標的原值卻發生了copy,這樣你雖然可以對指標指向的記憶體進行修改但是不能對指標進行修改。因此要傳...