2020-09-26

#include <stdio.h>
#include <stdlib.h>

#define ListLength 5;

typedef int ElemType;

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


void CreateList_L (LinkList &L, int n)
{                                                 //逆位序输入n个元素,建立带表头结点的链表L

  L=(LinkList)malloc(sizeof(LNode));
  L->next=NULL;                                   //建立一个带头结点的单链表
  LinkList p;
  for (int i=n; i>0; --i){
    p=(LinkList)malloc(sizeof(LNode));            //生成新节点
 scanf("%c", &p->data);                        //输入元素值
 p->next=L->next;                                 
 L->next=p;                                    //插入到表头
  }
}


//**************************************


int GetElem_L(LinkList &L, int i, ElemType &e)
{                                                //当第i个元素存在时,将其值赋给e并返回OK,否则返回ERROR
  LinkList p;
  p=L->next;                                     //初始化,p指向第一个结点
  int j=1;                                       //j为计数器
  while( p && j<i)
  {                                              //顺指针往后查找,直到p指向第i个元素或p为空
   p=p->next;
   ++j;
  }

  if  (!p|| j>i)  return 0;                      //第i个元素不存在
  e = p->data;                                   //用e返回值
  return 1;
}


//**************************************


void SortList_L(LinkList &L,int n)
{                                                //冒泡排序,将链表L中的n个元素排序

 int i,j,t;
 LinkList p,q;
 for(i=0;i<n-1;i++)
 {
   p=L->next;                                   //初始化,p指向第一个结点
   q=L->next->next;                          
   for(j=0;j<n-1-i;j++)
   {
    if(p->data>q->data) 
    {
     t=p->data;
     p->data=q->data;                                 //按从小到大的顺序排序
     q->data=t;
    } 
    p=p->next;  q=q->next;
   }
 }
}

 


void PrintList_L (LinkList &L, int n)
{ 
 LinkList p;
 p=L;
 while(p)
 {
  printf("%d\t",p->data);
  p=p->next;
 }
}

 


void  MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc)
{                                              //La, Lb是有序表,归并得到有序表Lc

  LinkList pa, pb, pc;
  pa = La->next;    pb = Lb->next;             //pa,pb分别指向La、Lb的头结点
  Lc = pc = La;            

  while (pa && pb)
  {

   if(pa->data>=pb->data)
   {
    pc->next=pb;
    pc=pb;
    pb=pb->next;
   }
   else
   {
    pc->next=pa;
    pc=pa;
    pa=pa->next;
   }
  }
  pc->next = pa ? pa : pb;                    //插入剩余段
  free(Lb);                                   //释放Lb头结点             

}


//**************************************

 

int ListInsert_L(LinkList &L, int i, ElemType e)
{                                            //在带头结点的单链表L中的第i个元素之前插入e
 LinkList p,s;
 p=L;
 int j=0;
 while(p&&j<i-1)
 {
  p=p->next;
  ++j;
 }                                        //寻找第i个结点
 if(!p||j>i-1)
  return 0;
 s=(LinkList)malloc(sizeof(LNode));
 s->data=e;
 s->next=p->next;
 p->next=s;
 return 1;
}


//**************************************

 

int ListDelete_L (LinkList &L, int i, ElemType &e)
{                                           //在带头结点的单链表L中删除第i个元素并用e返回其值
 LinkList p,q;
 p=L;
 int j=0;
 while(p&&j<i-1)
 {
  p=p->next;
  ++j;
 }                                      //寻找第i个结点
 if(!p||j>i-1)
  return 0;
 q=p->next;
 p->next=q->next;
 e=q->data;free(q);
 return 1;
}


//**************************************

void main(){
 
 
 LinkList La,Lb,Lc;
 
 
 //输入任意5个值,构造链表La
 printf("输入任意%d个值,构造链表La\n",ListLength);
 La=CreateList_L(La,ListLength);
 printf("Original La:\n");
 PrintList_L(La, ListLength);
 
 
 //输入任意5个值,构造链表Lb
 printf("输入任意%d个值,构造链表Lb\n",ListLength);
 Lb=CreateList_L (Lb,ListLength);
 printf("Original Lb:\n");
 PrintList_L(Lb, ListLength);
 
 
 //链表La, Lb排序
 La=SortList_L(La,ListLength);
 printf("La sorted:\n");
 PrintList_L(La, ListLength);
 Lb=SortList_L(Lb,ListLength);
 printf("Lb sorted:\n");
 PrintList_L(Lb, ListLength);
 
 
 //有序链表La, Lb归并为有序链表Lc
 MergeList_L(La,Lb,Lc);
 printf("Lc:\n");
 PrintList_L(Lc, ListLength);

}
C:\Users\zjjcl\Desktop\LinkList.cpp(176) : error C2143: syntax error : missing ')' before ';'
C:\Users\zjjcl\Desktop\LinkList.cpp(176) : error C2059: syntax error : ')'
C:\Users\zjjcl\Desktop\LinkList.cpp(177) : error C2143: syntax error : missing')'before';'C:\Users\zjjcl\Desktop\LinkList.cpp(177) : error C2440: '=' : cannot convert from 'void' to 'struct LNode *'        Expressions of type void cannot be converted to other typesC:\Users\zjjcl\Desktop\LinkList.cpp(177) : error C2059: syntax error : ')'C:\Users\zjjcl\Desktop\LinkList.cpp(179) : error C2143: syntax error : missing ')' before ';'C:\Users\zjjcl\Desktop\LinkList.cpp(179) : error C2059: syntax error : ')'C:\Users\zjjcl\Desktop\LinkList.cpp(183) : error C2143: syntax error : missing ')' before ';'C:\Users\zjjcl\Desktop\LinkList.cpp(183) : error C2059: syntax error : ')'C:\Users\zjjcl\Desktop\LinkList.cpp(184) : error C2143: syntax error : missing ')' before ';'C:\Users\zjjcl\Desktop\LinkList.cpp(184) : error C244

好像宏定义的变量和主函数的变量重名了,但是还是会有错误C2440说不能从’void’转换成’struct LNode’,awsl,我这么菜又这么喜欢大佬,或许有人能救救孩子

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值