实验题目: 单链表的操作
实验目的:
(1)掌握线性表的链式存储结构
(2)掌握单链表及其基本操作的实现。
实验要求:
(1)编程实现单链表的以下基本操作:建立单链表,查找单链表,插入单链表,删除单链表。
(2)采用单链表结构编程实现:两个有序单链表的归并运算。
实验代码:
#includeusing namespace std; typedef struct LNode { int data; struct LNode *next; }LNode,*LinkList; int InitList(LinkList &L); void CreateList(LinkList &L); int GetElem(LinkList &L,int i); int LocateElem(LinkList L,int e); int ListDelete(LinkList &L,int i); int ListInsert(LinkList &L,int i,int e); void ShowList(LinkList &L); void MergeList(LinkList &LA,LinkList &LB,LinkList &LC); int main() { LinkList L; InitList(L); int state; cout<<"===========单链表操作==============="< >state; while(state) { switch (state) { case 1:CreateList(L); break; case 2: int n;cout<<"pealse input num tho locate:";cin>>n;LocateElem(L,n); break; case 3: int n1;cout<<"pealse input site to get:";cin>>n1;GetElem(L,n1); break; case 4: int n2;cout<<"pealse input site to delete:";cin>>n2;ListDelete(L,n2); break; case 5: int n3;cout<<"pealse input site:";cin>>n3; int n4;cout<<"pealse input elem:";cin>>n4; ListInsert(L,n3,n4); break; case 6:ShowList(L); break; case 7: LinkList LA; cout<<"LA:"; InitList(LA); CreateList(LA); LinkList LB; cout<<"LB:"; InitList(LB); CreateList(LB); LinkList LC; InitList(LC); MergeList(LA,LB,LC); cout<<"Merge result:"; ShowList(LC); } cout<<"===========单链表操作==============="< >state; } return 0; } int InitList(LinkList &L) { L=new LNode; L->next=NULL; cout<<"init list succeed"< L=new LNode; L->next=NULL; LinkList r=L; int n; cout<<"pealse input the number of elems:"; cin>>n; int *arr=new int[n]; cout<<"pealse input elem:"; for(int i=0;i cin>>arr[i]; } for(int i=0;i LinkList p=new LNode; p->data=arr[i]; p->next=NULL; r->next=p; r=p; } } int GetElem(LinkList &L,int i) { LinkList p=L->next; int j=1; while(p&&j p=p->next; ++j; } if(!p||j>i) { cout<<"can't get elem"< data< LinkList p=L->next; int j=0; while(p&&p->data!=e) { p=p->next; j++; } if(p->data==e) { cout<<"find elem locate in "< cout<<"no elem"< LinkList p=L; int j=0; while(p&&(j p=p->next; ++j; } if(!p||j>i-1) { cout<<"can't insert elem"< LinkList s=new LNode; s->data=e; s->next=p->next; p->next=s; cout<<"insert succeed"< LinkList p=L; int j=0; while((p->next)&&(j p=p->next; ++j; } if(!(p->next)||(j>i-1)) { cout<<"can't delete elem"< LinkList q=p->next; p->next=q->next; delete q; cout<<"delete succeed"< LinkList p=L->next; cout<<"LinkList:"; while(p) { cout< data<<" "; p=p->next; } cout< LinkList pa=LA->next; LinkList pb=LB->next; LC=LA; LinkList pc=LC; while(pa&&pb) { if(pa->data<=pb->data) { pc->next=pa; pc=pa; pa=pa->next; } else { pc->next=pb; pc=pb; pb=pb->next; } } pc->next=pa?pa:pb; delete LB; }



