数据结构-链表-c/cpp

main.cpp

#include <iostream>
#include "LinkList.h"
using namespace std;

int main()
{
    Linklist La,Lb,Lc;
	int n1,n2;
	La=(Linklist)malloc(sizeof(Lnode));
	La->next=NULL;
	printf("******两个单链表的合并操作******\n");
	printf("\n请输入要建立的链表La的长度:");
	scanf("%d",&n1);
	creatlist_L(La,n1);
	printf("\n******输出链表La中元素******\n");
	traverlist_L(La);
		Lb=(Linklist)malloc(sizeof(Lnode));
	Lb->next=NULL;
	printf("******两个单链表的合并操作******\n");
	printf("\n请输入要建立的链表Lb的长度:");
	scanf("%d",&n2);
	creatlist_L(Lb,n2);
	printf("\n******输出链表Lb中元素******\n");
	traverlist_L(Lb);
	printf("\n******下面执行合并操作******\n");
	if(La->data>Lb->data){
        Lc=Lb;
	}else
        Lc=La;
	mergelist_L(La,Lb,Lc,n2);
	printf("\n******输出由链表La和Lb归并所得新的链表Lc中的元素******\n");
	traverlist_L(Lc);

    return 0;
}

linklist.h

#include <stdio.h>
#include<malloc.h>
#define NULL 0

using namespace std;
typedef  int  Elemtype;
typedef struct Lnode{
Elemtype data;
struct Lnode *next;
}Lnode,*Linklist;

//使用尾插法创建单链表
void creatlist_L(Linklist L,int n)
{
 int i;
Linklist p,q;
q=L;
for(i=1;i<=n;i++)
{
 p=(Linklist)malloc(sizeof(Lnode));
printf("输入线性表的第%d个元素:",i);
scanf("%d",&p->data);
p->next=q->next;
q->next=p;
q=q->next;

}
}
//使用头插法创建单链表
//void creatlist_L0(Linklist L,int n)
//{
//    int i;
//    Linklist p,q;
//    q=L;
//    for(i=1;i<=n;i++){
//        p=new Lnode;
//        if(!p) exit(-2);
//        cout<<"enter element"<<endl;
//        cin>>p->data;
//        p->next=q->next;
//        q->next=p;
//
//    }
//
//
//}

void traverlist_L(Linklist head)
{
    Linklist p;
    printf("以head 为头指针的单链表中的元素为:");
    p=head->next;
    while(p!=NULL){
        printf("%5d  ",p->data);
        p=p->next;
    }
    printf("\n");

    if(head->next==NULL){
        cout<<"empty"<<endl;
    }
}


//查找第i个位置的元素,找到后赋值给e
void Getelem(Linklist L,int i,Elemtype &e,int n)
{
    int j;
    Linklist p;
    p=L;
    if(i>n){
        cout<<"位置越界"<<endl;
        exit(0);
    }
    //未越界
    for(j=1;j<=i;j++){
        p=p->next;
    }
    e=p->data;
}

void Listdelete(Linklist &L,int i)
{
    int j;
    Linklist p,q;
    p=q=L;
    for(int j=1;j<i;j++){
        p=p->next;
        q=p->next;
    }
    q=q->next;
    p->next=q->next;
    free(q);

}

void mergelist_L(Linklist La,Linklist Lb,Linklist Lc,int lb)
{
    int i;
    Linklist pb,q,pc;
    pb=Lb->next;
    pc=Lc->next;


    for(i=0;i<lb;i++){
        q=new Lnode;
        if(!q) exit(-2);
        q->data=pb->data;
        if(pc->data<pb->data){
            q->next=pc->next;
            pc->next=q;
        }

        pb=pb->next;
        pc=pc->next;
    }
    cout<<"mergelist"<<endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值