#include
#include
struct student //定義乙個學生結點,結點包括值域和指標域
;typedef struct student list;
list *createlist();
list *insertnode(list *h,list *s);
list *deletenode(list *h,long no);
void display(list *h);
int main()
return 0;
}/*鍊錶的建立*/
list *createlist()
return head;
}/*鍊錶結點的插入*/
list *insertnode(list *h,list *s)
else
if(s->num<=p->num)
else//若插入的結點在中間位置
}else
}return h;
}/*鍊錶結點的元素刪除*/
list *deletenode(list *h,long no)
while(q->num!=no&&q!=null)//查詢帶刪結點,並儲存其上乙個結點
if(q->num==no)
else
}else
return h;
}/**********************************note*******************************
鍊錶主要通過指標進行訪問,因此,他的位址不是連續的。因此,
鍊錶無法實現隨機儲存,鍊錶的元素查詢,需要從頭結點開始逐
個掃瞄進行查詢。鍊錶是一種動態結構,相對於順序表而言,在
執行插入和刪除過程不需要移動大量的元素,執行效率大大提高。
以下就演算法的四個基本操作進行總結。
鍊錶的建立:(此處採用尾插法,並且鍊錶元素有序)
1、定義四個指標*h,*rear,*cur,*p;分別代表頭指標,尾指標(指向
鍊錶最後乙個結點的指標),當前結點的指標,輔助指標
2、將頭指標指向null(此處為了統一所有操作,鍊錶都帶有頭
結點,h=null,目的是建立乙個全新的鍊錶)
3、為全新的鍊錶新增結點,由於是動態的,建立乙個結點先要
申請記憶體,然後為其賦值,最後將其插入鍊錶。由於鍊錶的三個
部分(首部,尾部,中間)的不同,一般插入時要予以判斷,
進行不同操作。具體如下:(初始時p=h)
1)申請乙個結點並初始化
cur=(list *)malloc(sizeof(list));
cur->next=null;
scanf("%d %s %s",&cur->num,&cur->name,&cur->address);//此步根據結點的定義來決定
2)插入鍊錶
當鍊表為空時
if(h==null)
h=cur;
當鍊表不空時,通過某一參值比較,知道插入的位置(此處以num為參值)
while(p->numnum&&p!=null)
p=p->next;
if(p==h)//當插入位置為第乙個結點時
else if(p->next==null)//當插入位置為最後乙個結點之後
else//當插入位置在中間時
插入完成,返回鍊錶return h;
鍊錶的插入:略,操作與鍊錶的建立相同
鍊錶的刪除:
查詢與刪除,根據刪除的參值進行查詢刪除元素前乙個元素的位置(此處參值為num,前一元素指標*pre)
1)如果鍊錶為空,則查詢失敗,輸出提示資訊
if(h==null)
printf("鍊錶為空,查詢失敗!\n")
else
if(p->num==no)
else
printf("鍊錶中不存在這個結點,刪除失敗!\n");
}return h;
c 鍊錶的基本操作建立,插入,刪除,輸出。
include include include define n sizeof struct node using namespace std struct node void jianli node head,int n 建立鍊錶 p2 next null void charu node head...
鍊錶的簡單操作 建立,輸出,插入,刪除
include include define len sizeof struct student int n 0 節點數量 struct student head struct student creat void p2 next null return head void add int n 插入...
鍊錶的基礎操作建立插入刪除輸出
include using namespace std node creat int n 建立有個n個結點的單鏈表 node insert node h,int m,int l 在單鏈表的第幾個元素之後插入值l node remove node h,int t,int n 刪除鍊錶中值為t的元素 v...