又接着看了链式有序表的合并๑乛◡乛๑
head.h头文件——包含了 各种声明还有结构体定义
#ifndef HEAD_H_INCLUDED#define HEAD_H_INCLUDED#define ElemType int#define Status inttypedef struct Node{ ElemType data; struct Node *next;}Node,*pNode;Status InitList(pNode &h); //初始化链表Status GetElem(pNode L,int i,ElemType e); //取值Node *LocateElem(pNode L,ElemType e); //查找Status ListInsert(pNode L,int i,ElemType e); //插入Status ListDelete(pNode L,int i); //删除void output(pNode h); //打印pNode creat_h(int n); //创建pNode creat_r(int n); //创建#endif // HEAD_H_INCLUDED
合并功能函数(单独拿出来的啦๑乛◡乛๑)
void MergeList(pNode &A,pNode &B,pNode &C){ pNode pa,pb,pc; pa=A->next;pb=B->next; //pa和pb的初值分别指向两个表的第一个结点 C=A; //用A的头结点作为C的头结点 pc=C; //pc指向C的头结点 while(pa&&pb) {//A和B均未达到表尾,则依次“摘取”两表中较小的结点插入到C的最后 if(pa->data <= pb->data) { pc->next=pa; pc=pc->next; pa=pa->next; } else { pc->next=pb; pc=pc->next; pb=pb->next; } } pc->next=pa? pa:pb; //将非空表的剩余段插入到pc所指结点之后 delete B;}main.c文件
#include#include "head.h"using namespace std;void MergeList(pNode &A,pNode &B,pNode &C);int main(){ int n; pNode A,B,C; cout<<"input n data of A:"; cin>>n; A=creat_r(n); cout<<"input n data of B:"; cin>>n; B=creat_r(n); InitList(C); MergeList(A,B,C); output(C); return 0;}void MergeList(pNode &A,pNode &B,pNode &C){ pNode pa,pb,pc; pa=A->next;pb=B->next; C=A; pc=C; while(pa&&pb) { if(pa->data <= pb->data) { pc->next=pa; pc=pc->next; pa=pa->next; } else { pc->next=pb; pc=pc->next; pb=pb->next; } } pc->next=pa? pa:pb; delete B;}Status InitList(pNode &h) //初始化{ h=new Node; h->next=NULL; return 1;}Status GetElem(pNode L,int i,ElemType e) //取值{ pNode p=L->next; int j=1; while(p&&j next; j++; } if(!p||j>i) return -1; e=p->data; return 1;}Node *LocateElem(pNode L,ElemType e) //查找{ pNode p=L->next; while(p&&p->data!=e) p=p->next; return p;}Status ListInsert(pNode L,int i,ElemType e) //插入{ pNode p=L; int j=0; while(p&&j next; j++; } if(!p||j>i-1) return -1; pNode q=new Node; q->data=e; q->next=p->next; p->next=q; return 1;}Status ListDelete(pNode L,int i) //删除{ pNode p=L; int j=0; while(p->next&&j next; j++; } if(!p->next||j>i-1) return -1; pNode q=p->next; p->next=p->next->next; delete q; return 1;}pNode creat_h(int n) //创建-头插法{ pNode L; L=new Node; L->next=NULL; for(int i=0;i >p->data; p->next=L->next; L->next=p; } return L;}pNode creat_r(int n) //创建-尾插法{ pNode h,q,p; h=q=new Node; h->next=NULL; for(int i=0;i next=NULL; cin>>p->data; q->next=p; q=q->next; } return h;}void output(pNode h) //打印链表{ pNode p=h->next; cout<<"打印链表:"; while(p) { cout< data<<" "; p=p->next; }}