链式线性表的操作

//链式线性表的 创建,查找,删除,插入,合并操作
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;

typedef struct LNode{
    int data;
    struct LNode *next;
}LNode,*LinkList;

void CreatList(LinkList &L,int n){
  L=(LinkList) malloc(sizeof(LNode));

  LinkList q=L;

  for(int i=0;i<n;i++){
              LinkList p=(LinkList) malloc(sizeof(LNode));
              scanf("%d",&(p->data));
              q->next=p;
              q=p;
              q->next=NULL;
  }

}
void ShowList(LinkList L){
            LinkList q=L->next;
   while (q!=NULL){
         cout<<(q->data)<<" ";
         q=q->next;
   }
   cout<<endl;
}

int GetElem_L(LinkList L,int i,int &e){  //根据序号查找
   int j=1;
   LinkList p=L->next;
   while (j<i&&p!=NULL)
{
              p=p->next;
              j++;
}
if(j>i||p==NULL){
              cout<<"error"<<endl;
              return 0;
}else{
  e=p->data;
  return 1;
}
}
int ListInsert(LinkList &L,int i,int e){
     LinkList p=L;
     int j=1;
     while (j<i&&p->next!=NULL){
              p=p->next;
              j++;
     }
     if(j>i||p->next==NULL){
           cout<<"error"<<endl;
              return 0;
     }else {
        LinkList q=(LinkList)malloc (sizeof (LNode));
        q->data=e;
        q->next=p->next;
        p->next=q;
return 1;
     }


}
int ListDelete(LinkList &L,int i,int &e){
  LinkList p=L;
  int j=1;
  while(j<i&&p->next!=NULL){
                            p=p->next;
                           j++;
  }
  if(j>i||p->next==NULL){
              cout<<"error"<<endl;
              return 0;
  }else
      e=p->next->data;
    p->next=p->next->next;
    return 1;
  }

void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc){
 LinkList pa,pb,pc;
  Lc=(LinkList)malloc(sizeof(LNode));
 pc=Lc;
 pa=La->next;
 pb=Lb->next;
 while(pa!=NULL&&pb!=NULL){
              if(pa->data < pb->data){
                            pc->next=pa;
                            pc=pa;
                            pa=pa->next;
              }else{
                            pc->next=pb;
                            pc=pb;
                            pb=pb->next;
              }
 }
              if(pa){
                            pc->next=pa;
              }else{
                   pc->next=pb;
              }

free(La);
free(Lb);
}
int main()
{
    LinkList La,Lb,Lc;
    int n;
    cin>>n;
    CreatList(La,n);
     CreatList(Lb,n);
      //CreatList(Lc,2*n);
       //Lc=(LinkList)malloc(sizeof(LNode));

    //ShowList(La);
    //ShowList(Lb);

   /* int get;
    if(GetElem_L( L,2,get))
    cout<<get<<endl;*/

    //int ins=100;
//    if( ListInsert(L,2,100) ){
//       ShowList(L);
//    }

//    int del;
//    if( ListDelete( L,4,del) ){
//         ShowList(L);
//         cout<<del<<endl;
//    }

    MergeList(La,Lb,Lc);
    ShowList(Lc);
    return 0;
}

链式线性表
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值