本次實現的是線性鍊錶的操作,和上次單鏈表不同在於,上次只實現了表頭的插入和刪除,這次是對線性表的整體實現插入和刪除
廢話不多說,直接看**,linked_llist.h
#includeusing namespace std;
template struct node;
template class linked_llist;
template linked_llist::linked_llist()
template void linked_llist::prt_linked_llist()while(p!=null);
return;
}template void linked_llist::ins_linked_llist(t x,t b)//empty
if(head->d==x)//first node
q=head;
while((q->next!=null)&&(((q->next)->d)!=x)) q=q->next;
p->next=q->next;q->next=p;
return;
}template int linked_llist::del_linked_llist(t x)
while((q->next!=null)&&(((q->next)->d)!=x)) q=q->next;
if(q->next==null) return 0;
p=q->next;q->next=p->next;
delete p;
return 1;
}
舉例說明上面操作,linked_llist_main.cpp
#include"linked_llist.h"
int main(){
linked_llists;
cout<<"1 ouput the element"《這次圖就不截了,不過簡單的說明一下,對於鍊錶最基本的操作,插入和刪除。
關於插入:
首先,插入,要明白是要把什麼東西插入到什麼位置,所以2個引數,x和b,在x前面插入b。
位置就有3種情況:
1.如果本來就是空鍊錶?那麼此時b這個元素自然是表頭,head和p同時指向這個位置。
2.假如是乙個頭結點?那麼就是上次介紹的單鏈表,p指向head,再由head指到p就可以了,(指向:p->next=head,指到:head=p)
3.如果是中間的某個結點?首先找到要插入位置的前乙個節點,如何找,上面的while迴圈。
然後,就是就是連線進去,也就是p指向q的指向,q的指向再到p,來回就是這樣的。
關於刪除:
1.要刪除什麼?2.先說到底有沒有這個元素?
所以3種情況:
1.如果是空表?那麼就沒什麼好刪除的,退出;
2.如果是乙個元素頭結點?和上面的是乙個道理
3.如果是中間的某個元素?
3.1.假如遍歷完,沒有?那自然不用刪除
3.2.發現元素,這個元素的前乙個結點為q,自己為p,所以q指向到p的指向,釋放p,就可以了。
線性鍊錶的操作
include include include define error 0 define ok 1 define equal 1 define overflow 1 define list init size 100 define listincrement 10 struct stustu 50...
線性鍊錶基本操作實現(C C )
函式結果狀態 define true 1 define false 0 define ok 1 define error 0 define infeasible 1 define null 0 define overflow 2 include include include using names...
線性表的陣列實現和鍊錶實現
線性表的順序儲存實現 線性表用陣列來實現 typedef struct polynode polynomial struct polynode typedef struct lnode list struct lnode struct lnode l list ptrl 線性表結構的指標 訪問下標為...