单链表的操作
实验内容:
- 编程实现单链表的基本操作:建立单链表,查找单链表,插入单链表,删除单链表;
- 采用单链表结构编程实现:两个有序单链表的归并运算
#include <iostream> #include <cstdlib> #define ElemType int #define OK 1 #define ERROR 0 #define Status int using namespace std; typedef struct LNode { ElemType data; struct LNode *next; } LNode,*LinkList; void CreatList_H(LinkList &L,int n) { LinkList p; L=new LNode; L->next=NULL; int i; for(i=0; i<n; ++i) { p=new LNode; cin>>p->data; p->next=L->next; L->next=p; } } void print(LinkList L) { LinkList p; p=L->next; do{ cout<<p->data<<" "; p=p->next; }while(p!=NULL); cout<<endl; } Status InitList(LinkList &L) { L=new LNode; L->next=NULL; return OK; } Status GetElem(LinkList L,int i,ElemType &e) { LinkList p; p=L->next; int j; j=1; while(p&&j<i) { p=p->next; ++j; } if(!p||j>i)return ERROR; e=p->data; cout<<e<<endl; return OK; } LNode *LocateElem(LinkList L,ElemType e) { LinkList p; p=L->next; while(p&&p->data!=e) p=p->next; cout<<p<<endl; return p; } Status ListInsert(LinkList &L,int i,ElemType e) { LinkList p; LinkList s; p=L; int j; j=0; while(p&&(j<i-1)) { p=p->next; ++j; } if(!p||j>i-1)return ERROR; s=new LNode; s->data=e; s->next=p->next; p->next=s; return OK; } Status ListDelete(LinkList &L,int i) { LinkList p; LinkList q; p=L; int j; j=0; while((p->next)&&(j<i-1)) { p=p->next; ++j; } if(!(p->next)||(j>i-1)) return ERROR; q=p->next; p->next=q->next; delete q; return OK; } void MergeList_L(LinkList &LA,LinkList &LB,LinkList &LC) { LinkList pa,pb,pc; pa=LA->next; pb=LB->next; LC=LA; 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; } int main() { LinkList L; LinkList LA,LB,LC; int n,i; cout<<"请输入一个数n来表示单链表的长度"<<endl; cin>>n; cout<<"输入n个数。前插法插入到单链表中"<<endl; CreatList_H(L,n); cout<<"显示出输入数据的单链表"<<endl; print(L); int c; cout<<"请输入一个数表示要查找的数字"<<endl; cin>>c; cout<<"输出查找元素的地址"<<endl; *LocateElem(L,c); int d,f; cout<<"请输入两个数,d表示要插入的元素位置,f表示要插入的元素数值"<<endl; cin>>d>>f; ListInsert(L,d,f); cout<<"显示出插入元素后的单链表"<<endl; print(L); int g; cout<<"请输入一个数表示要删除的元素位置"<<endl; cin>>g; ListDelete(L,g); cout<<"显示出删除后的单链表"<<endl; print(L); cout<<"请输入一个数n来表示单链表的长度"<<endl; cin>>n; cout<<"输入n个数。前插法插入到单链表中"<<endl; CreatList_H(LA,n); cout<<"请输入一个数n来表示单链表的长度"<<endl; cin>>n; cout<<"输入n个数。前插法插入到单链表中"<<endl; CreatList_H(LB,n); MergeList_L(LA,LB,LC); cout<<"输出归并后的单链表"<<endl; print(LC); return 0; }