简单算法实现 Posted on 2018-09-08 | Edited on 2019-04-14 | In 数据结构 | Views: Symbols count in article: 4.8k | Reading time ≈ 4 mins. content{:toc} 复数抽象数据类型的定义及操作12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758#include<iostream>using namespace std;#define ERROR 0 typedef float status;typedef struct //抽象数据类型的存储结构{ float Realpart; float Imagepart;}Complex;void Create(Complex &C,float x,float y) //构建复数{ C.Realpart=x; C.Imagepart=y;}status GetReal(Complex C) //取实部{ return C.Realpart;}status GetImag(Complex C) //取虚部{ return C.Imagepart;}Complex Add(Complex C1,Complex C2) //复数相加{ Complex sum; sum.Realpart=C1.Realpart+C2.Realpart; sum.Imagepart=C1.Imagepart+C2.Imagepart; return sum;}Complex Sub(Complex C1,Complex C2) //复数相减{ Complex dif; dif.Realpart=C1.Realpart-C2.Realpart; dif.Imagepart=C1.Imagepart-C2.Imagepart; return dif;}void main(){ Complex C1,C2,C3,C4; cout<<"请输入第一个复数!"<<"\n"; cin>>C1.Realpart; cin>>C1.Imagepart; cout<<"请输入第二个复数!"<<"\n"; cin>>C2.Realpart; cin>>C2.Imagepart; cout<<"C1实部为:"<<GetReal(C1)<<"C1虚部为:"<<GetImag(C1)<<"\n"; C3=Add(C1,C2); C4=Sub(C1,C2); cout<<"和为:"<<C3.Realpart<<"+"<<C3.Imagepart<<"i"<<"\n"; cout<<"差为:"<<C4.Realpart<<"+"<<C4.Imagepart<<"i";} 两个有序表的合并(顺序表)12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667#include<iostream>using namespace std;#define ERROR 0#define MAXSIZE 100#define OK 1typedef int status;typedef int Elemtype;typedef struct //抽象数据类型的存储结构{ Elemtype *elem; int length;}SqList;status initlist(SqList &L){ L.elem=new Elemtype[MAXSIZE]; if(!L.elem) return ERROR; L.length=0; return OK;}SqList createlist(int n){ SqList L; initlist(L); for(int i=0;i<n;i++) { cin>>L.elem[i]; ++L.length; } return L;}void merge(SqList L1,SqList L2,SqList &L){ int *p,*p1,*p2,*p1_last,*p2_last; initlist(L); L.length=L1.length+L2.length; p=L.elem;p1=L1.elem;p2=L2.elem; p1_last=L1.elem+L1.length-1; p2_last=L2.elem+L2.length-1; while((p1<=p1_last)&&(p2<=p2_last)) { if(*p1<=*p2) *p++=*p1++; else *p++=*p2++; } while(p1<=p1_last) *p++=*p1++; while(p2<=p2_last) *p++=*p2++; }void main(){ SqList L1,L2,L; initlist(L1); initlist(L2); initlist(L); cout<<"请输入4个数字!"<<"\n"; L1=createlist(4); cout<<"请输入3个数字!"<<"\n"; L2=createlist(3); merge(L1,L2,L); for(int j=0;j<L.length;j++) { cout<<L.elem[j]; }} 有序表的合并(单链表)1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980#include<iostream>using namespace std;#define ERROR 0#define MAXSIZE 100#define OK 1typedef int status;typedef int Elemtype;typedef struct LNode{ Elemtype data; struct LNode *next;}LNode,*Linklist;status init(Linklist &L) //链表初始化{ L=new LNode; //为链表开辟内存空间 L->next=NULL; return OK;}void create_L(Linklist &L,int n) //后插法{ LNode *p,*r; L=new LNode; //开辟内存空间 L->next=NULL; //创建一个链表 r=L; for(int i=0;i<n;i++) { p=new LNode; //创建结点 cin>>p->data; p->next=NULL; r->next=p; r=p; }}void MergeList_L(Linklist La,Linklist Lb,Linklist &Lc){ //合并有序链表 LNode *pa,*pb,*pc,*a; init(Lc); //******这是必须的!!! pa=La->next; pb=Lb->next; pc=Lc=La; //用La的头结点作为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 a; //释放Lb的头结点 }} void main(){ LNode *p,*L1,*L2,*L,*p1,*p2; cout<<"请输入3个数字"<<"\n"; create_L(L1,3); cout<<"创建成功!"<<"第一个序列是:"; p1=L1->next; while(p1) { cout<<p1->data; p1=p1->next; } cout<<"请输入4个数字"<<"\n"; create_L(L2,4); cout<<"创建成功!"<<"第二个序列是:"; p2=L2->next; while(p2) { cout<<p2->data; p2=p2->next; } MergeList_L(L1,L2,L); p=L->next; cout<<"输出为"<<""; while(p) { cout<<p->data; p=p->next; }} ----------------------------- 我是有底线 ~..~ ------------------------------