赞
踩
1.合并两个非递减的线性表,形成一个非递减的单链表,输出该单链表
- #include<stdio.h>
- #include<stdlib.h>
- typedef struct Lnode{
- int data;
- struct Lnode *next;
- }Lnode,*LinkList;
- void InsertList(LinkList &L,int n,int a[]);
- void MergeList(LinkList &A,LinkList &B,LinkList &C);
- int main(){
- LinkList A,B,C;
- Lnode *p;
- int a[]={6,7,9,14,37,45,65,67};//两个数组
- int b[]={3,7,11,34,45,89};
- InsertList(A,sizeof(a)/sizeof(a[0]),a);
- InsertList(B,sizeof(b)/sizeof(b[0]),b);
- int ListLengthA=sizeof(a)/sizeof(a[0]);
- int ListLengthB=sizeof(b)/sizeof(b[0]);
-
- p=A->next;
- for(int i=0;i<ListLengthA;i++){
- if(p){
- printf("%d ",p->data);
- }
- p=p->next;
- }
- printf("\n");
- p=B->next;
- for(int i=0;i<ListLengthB;i++){
-
- if(p){
- printf("%d ",p->data);
- }
- p=p->next;
- }
- printf("\n");
- MergeList(A,B,C);
- p=C->next;
- while(p){
- printf("%d ",p->data);
- p=p->next;
- }
- }
-
- void InsertList(LinkList &L,int n,int a[]){//尾插法建立单链表,将数组里数变到单链表中
- L=new Lnode;
- L->next=NULL;
- Lnode *p;
- Lnode *r=L;
- int i;
- for(i=0;i<n;i++){
- p=new Lnode;
- p->data=a[i];
- r->next=p;
- r=p;
- }
- r->next=NULL;
- }
- void MergeList(LinkList &A,LinkList &B,LinkList &C){
- C=A;//c指针指向链表A头结点,此时c也是链表C的头指针
- Lnode *pa,*pb,*pc;
- pa=A->next;//pa指针指向A的首元结点
- pb=B->next;//pb指针指向B的首元结点
- pc=C;//pc指针指向链表c/A的头结点
- C->next=NULL;
- while(pa&&pb){
- if(pa->data<=pb->data){ //如果pa比pb所指数据域小,那么pa所指数据域是我们先要画箭头的
- pc->next=pa;//从pc画箭头到pa所指结点
- pc=pa;
- pa=pa->next;
- }else{
- pc->next=pb;
- pc=pb;
- pb=pb->next;
- }
- }
- //如果pa pb指针谁先指向空,则跳出上面的循环
- pc->next=pa?pa:pb;// 如果pa指针指向为空,而pb不为空,则让pc后继续画箭头连上pb所指的地址
- delete B; //释放链表B的头指针
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。