早教吧 育儿知识 作业答案 考试题库 百科 知识分享

数据结构问题急在线等#include<stdio.h>#include<stdlib.h>#defineListLength5;#defineERROR#defineOKintn=5;typedefintElemType;//元素类型typedefstructLNode{ElemTypedata;structLNode*next;

题目详情
数据结构问题 急 在线等#include <stdio.h> #include <stdlib.h> #define ListLength 5; #define ERROR #define OK int n=5; typedef int ElemType;//元素类型 typedef struct LNode { ElemType data; struct LNode *next; }LaNode, *LinkList; void CreateList_L (LinkList &La){ int i; LinkList p;//逆位序输入n个元素,建立带表头结点的链表L La=(LinkList)malloc(sizeof(LNode)); La->next=NULL; for (i=n; i>0;--i){ p=(LinkList)malloc(sizeof(LaNode)); scanf("%c", &p->data); p->next=La->next; La->next=p; } }//CreateList_L void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc){ //La, Lb是有序表,归并得到有序表Lc LinkList pa, pb, pc; int i,n; pa = La->next; Lc = pc = La; for (i=n; i>0;--i){ pb=(LinkList)malloc(sizeof(LNode)); scanf("%c",&pb->data); } while (pa && pb) { if (pa>pb)//比较La和Lb数据的大小 *pc++=*pa++; else *pc++=*pb++;//按照降序排列形成Lc } pc->next = pa ? pa : pb; //插入剩余段 free(Lb); //释放Lb头结点 }//MergeList_L int GetElem_L(LinkList &L, int i, ElemType &e){ int j; LinkList p;//当第i个元素存在时,将其值赋给e并返回OK,否则返回ERROR p=L->next; //初始化,p指向第一个结点 j=1; //j为计数器 while( p && j<i){ //顺指针往后查找,直到p指向第i个元素或p为空 p=p->next; j++; } if (!p|| j>i) return 0; //第i个元素不存在 else e = p->data; return 1; } void SortList_L(LinkList &L,int n){ int i,j,t; LinkList p,q; for(i=0;i<n-1;i++){ p=L->next; q=L->next->next; for(j=0;j<n-1-i;j++){ if(p->data<q->data) //比较p和q的小小 {t=p->data;p->data=q->data;q->data=t;} //将L按照升序排列 p=p->next; q=q->next; } } } void PrintList_L (LinkList &L, int n){ LinkList p; p=L->next; while (p->next=NULL){ printf("%c",p->data); p=p->next; } } int main() { LinkList La,Lb,L; int i,e; printf("输入五个数据:\n"); CreateList_L(La); printf("再次输入五个数据:\n"); MergeList_L(La,Lb,L); GetElem_L(L,i,e); SortList_L(L,n); PrintList_L(L, n); return 0; } 这个程序 我现在已经改到没有组建和连接错误了 但是到输入第二组数据时程序就会报错 能帮我看看哪里不对么?
▼优质解答
答案和解析
#include #include #define ListLength 5 #define ERROR #define OK int n=5; typedef int ElemType;//元素类型 typedef struct LNode { ElemType data; struct LNode *next; }LaNode, *LinkList; void CreateList_L(LinkList &La){ int i; LinkList p;//逆位序输入n个元素,建立带表头结点的链表L La=(LinkList)malloc(sizeof(LaNode)); La->next=NULL; for (i=n; i>0;--i){ p=(LinkList)malloc(sizeof(LaNode)); scanf("%d", &p->data);//--为什么%c p->next=La->next; La->next=p; } }//CreateList_L void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc){ //La, Lb是有序表,归并得到有序表Lc LinkList pa, pb, pc,tmp; int i,n; pa = La->next; pb = Lb->next; Lc = pc = La; while (pa && pb) {//--你的这里面完全不对 if (pa->data > pb->data)//比较La和Lb数据的大小 {pc->next=pa; pa=pa->next; pc=pc->next;} else {pc->next=pb; pb=pb->next; pc=pc->next;}//按照降序排列形成Lc } pc->next = pa ? pa : pb; //插入剩余段 free(Lb); //释放Lb头结点 }//MergeList_L int GetElem_L(LinkList &L, int i, ElemType &e){ int j; LinkList p;//当第i个元素存在时,将其值赋给e并返回OK,否则返回ERROR p=L->next; //初始化,p指向第一个结点 j=1; //j为计数器 while( p && jnext; j++; } if (!p|| j>i) return 0; //第i个元素不存在 else e = p->data; return 1; } void SortList_L(LinkList &L,int n){ int i,j,t; LinkList p,q; for(i=0;inext; q=L->next->next; for(j=0;jdatadata) //比较p和q的小小 {t=p->data;p->data=q->data;q->data=t;} //将L按照升序排列 p=p->next; q=q->next; } } } void PrintList_L (LinkList &L,int n){ LinkList p; p=L->next; while (p!=NULL){//这里也错了 printf("%d",p->data); p=p->next; } } int main() { LinkList La,Lb,L; int i,e; printf("输入五个数据:\n"); CreateList_L(La); printf("再次输入五个数据:\n"); CreateList_L(Lb);//--帮你加了这个 MergeList_L(La,Lb,L);//--这个函数修改了下 GetElem_L(L,i,e); SortList_L(L,n); PrintList_L(L,n); return 0; } 编译运行无问题