C语言顺序表的基本操作中指针的使用, 以下是程序:我build成功了,但是PriList失败了

#include<stdio.h>#include<stdlib.h>#include"SQlist.h"intmain(){printf("Helloworld!\n"... #include <stdio.h>
#include <stdlib.h>
#include"SQlist.h"
int main()
{
printf("Hello world!\n");
Sqlist L;
ElemType *e;
int i=3;
InitList(&L);
Build(&L);
PriList(&L);
return 0;
}
////////////////////////这是SQlist.h
#ifndef SQLIST_H_INCLUDED
#define SQLIST_H_INCLUDED
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
int OVERFLOW =1;
typedef int ElemType;
typedef int status;
typedef struct{
ElemType *elem;
int length;
int listsize;
}Sqlist;
////////////////////////!!!!!!!!!!!!!!!!!!!?
status PriList(Sqlist *L)
{
int i;
for(i=0;i<L->length;i++)
{
printf("%5d\n",(L->elem+i));
}
return 0;
}
status InitList(Sqlist *L)
{
L->elem=(ElemType *)malloc(LIST_INIT_SIZE *sizeof(ElemType));
if(!L->elem) exit (OVERFLOW);
L->length=0;
L->listsize=LIST_INIT_SIZE;
printf("i have init a Sqlist and its length:%d,listsize:%d\n",L->length,L->listsize);
return 0;
}
status Build(Sqlist *L)
{
int i,j;
printf("please enter number and members:");
scanf("%d",&i);
if(i>L->listsize)
{
ElemType *newbase;
newbase=(ElemType*)realloc(L->elem,(i+LISTINCREMENT)*sizeof(ElemType));

L->elem=newbase;
if(!L->elem) exit(OVERFLOW);
L->listsize=i+LIST_INIT_SIZE;
}
j=0;
while(j<i)
{
scanf("%d",L->elem+i);
j++;
}
L->length=i;
return 0;
}
#endif
PriList改成
printf("%5d\n",*(L->elem+i)); 也不行
展开
 我来答
bt00345
2016-05-19 · TA获得超过2236个赞
知道大有可为答主
回答量:3367
采纳率:7%
帮助的人:848万
展开全部
我把你的程序改好了,先复制在下面吧 #include<stdio.h>#include<malloc.h>#include<math.h>#define OK 1typedef int Status;typedef int ElemType;typedef struct LNode{ ElemType data; struct LNode * next;}LNode,* LinkList;void CreateList_L(LinkList &L,int n)//逆位序输入n个元素的值,建立带表头结点的单链线性表L{ int i; LNode * p; L=(LinkList)malloc(sizeof(LNode)); L->next=NULL;//先建立一个带头结点的单链表 for(i=n;i>0;--i) { p=(LinkList)malloc(sizeof(LNode));//生成新结点 printf("请输入第%d个结点的数据:\n",i); scanf("%d",&p->data);//输入元素值 p->next=L->next; L->next=p;//插入到表头 }}/*Status InitList(LinkList &L) { L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; return OK; }*/void MergeList_L(LinkList &L1,LinkList &L2,LinkList &L3)//已知单链线性表La和Lb的元素按值非递减排列{ LNode *pa, *pb, *pc; //归并La和Lb得到新的单链线性表Lc,Lc的元素也按值非递减排列 pa=L1->next; //printf("%d\n",pa->data); pb=L2->next; //printf("%d\n",pb->data); L3=L1;//用La的头结点作为Lc的头结点 pc=L3; 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; } } pc->next=pa?pa:pb;//插入剩余段 free(L2);//释放Lb的头结点}void Print_L(LinkList &L)//打印链表{ LNode *p; p=L->next; if(p==NULL) { printf("该链表为空\n"); } else { while(p!=NULL) { printf("%-5d",p->data); p=p->next; } } printf("\n");}void main(){ int m,n; LinkList La, Lb, Lc; printf("请输入链表La中结点的个数:\n"); scanf("%d",&m); printf("请输入链表La:\n"); CreateList_L(La,m); printf("链表La为:\n"); Print_L(La); printf("请输入链表Lb中结点的个数:\n"); scanf("%d",&n); printf("请输入链表Lb:\n"); CreateList_L(Lb,n); printf("链表Lb为:\n"); Print_L(Lb); // InitList(Lc); MergeList_L(La,Lb,Lc); printf("链表Lc为:\n"); Print_L(Lc);}自定义函数Print_L()那里有一些问题,打印链表的时候不能移动头结点,否则归并的时候就找不到头结点了。可以定义一个指针变量p,用来移动到下一个节点。别的没什么问题了。 运行结果如下,你也可以自己跑一下程序,就看到结果了。最后链表Lc也是有序的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式