注意事項:
1.建立的是帶頭結點的單鏈線性表,在輸出時要從頭結點的下一個開始輸出,即利用中間量Linklist p=l->next;實現單鏈線性表中元素的輸出
2.建立單鏈線性表時由於加入是按逆序加入的,此時需要一個中間變數將逆序錶轉為順序表
3.關於儲存資料的結構也就是struct ,這裡利用typedef將結構體定義為變數類型名,類似於int等。結構體裡面加上struct是為了說明LNode是結構體名,而不是變數類型名
#include<iostream>#define LIST_INIT_SIZE 100#define MAX 3using namespace std;typedef struct LNode{int data;struct LNode* next;}LNode,*Linklist;void GetElem(Linklist l,int i,int &e)//在帶頭結點的單鏈表l中,當第i個元素存在時,其值賦值為e{Linklist p; p=l->next;int j=0;while(p&&(j<i)){p=p->next;++j;}if(!p || j>i)return ;e=p->data;}void ListInsert(Linklist &l,int i,int e)//在帶頭結點的單鏈線性表中第i個位置之前插入元素e{Linklist p=l;int j=0;while(p&&(j<i-1)){p=p->next;++j;}if(!p || (j>i-1))return;Linklist s=new LNode[sizeof(LNode)]; s->data=e;s->next=p->next;p->next=s;}void ListDelete(Linklist &l,int i,int &e){Linklist p=l;int j=0;while(p->next&&(j<i-1)){p=p->next;++j;}if(!(p->next) || (j>i-1))return;Linklist q=p->next;p->next=q->next;e=q->data;delete q;}void Creatlist(Linklist &l,int n)//順序輸入n個元素的值,建立帶表前端節點的單鏈線性表l{Linklist p,q;//q輔助將逆序轉為順序l=new LNode[sizeof(LNode)];l->next=NULL;q=l;for(;n>0;--n){p=new LNode[sizeof(LNode)];cin>>p->data;p->next=NULL;q->next=p;q=q->next;}}int listlength(Linklist &l ){int i=0;Linklist p=l->next;while(p){++i;p=p->next;}return i;}void print(Linklist l)//單鏈線性表列印{Linklist p;p=l->next;//頭結點的單鏈表,從頭結點下一個開始輸出if(p!=NULL){while(p){cout<<p->data<<" ";p=p->next;}cout<<endl;}}void MergeList(Linklist &la,Linklist &lb,Linklist &lc)//單鏈線性表lalb的元素安值非遞減排列,歸併la,lb到lc,lc也是非遞減{Linklist pa=la->next;Linklist pb=lb->next;Linklist pc=lc=la;while(pa && pb){if(pa->data<=pb->data){pc->next=pa;pc=pa;pa=pa->next;++i;}else{pc->next=pb;pc=pb;pb=pb->next;++j;}}pc->next=pa? pa:pb;}int main(){Linklist la1,lb1,lc1;cout<<"建立單鏈線性表la:";Creatlist(la1,MAX);cout<<"單鏈線性表la為:";print(la1);cout<<"建立單鏈線性表lb:";Creatlist(lb1,MAX);cout<<"單鏈線性表lb為:";print(lb1);MergeList(la1,lb1,lc1);cout<<"單鏈線性表lc為:";print(lc1);cout<<"input the inset value and location: ";int i,e;cin>>i>>e;ListInsert(lc1,i,e);cout<<"添加後單鏈線性表lc為:";print(lc1);int t=listlength(lc1);cout<<"the lc1's length is: "<<t<<endl;cout<<"input delete location: ";int j,m;cin>>j;ListDelete(lc1,j,m);cout<<"刪除後單鏈線性表lc為:";print(lc1);}