读书人

哪位高手能帮忙调试一下小弟我的程序

发布时间: 2013-06-25 23:45:41 作者: rapoo

谁能帮忙调试一下我的程序,或者找出程序中的问题,在调试时总是提示函数InitList L=(LinkList)malloc(sizeof(LNODE))

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

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -1

typedef int ElemType;
typedef int Status;
typedef struct LNode{
//定义结点
ElemType data;
struct LNode *next;
}LNode,*LinkList;

void InitList(LinkList &L){
L=(LinkList)malloc(sizeof(LNODE));
if(!L)
exit(OVERFLOW);
L.next=NULL;
}
void DestroyList(LinkList L){
LinkList q;
while(L){
q=L.next;
free(L);
L=q;
}

}


void ClearList(LinkList L){
LinkList p,q;
p=L.next;
while(p){
q=p;
free(p);
p=q.next;
}
L.next=NULL;
}

Status Listempty(LinkList&L){
if(L.next)
return FALSE;
else
rerurn TRUE;
}


int ListLength(LinkList L)
{ // 初始条件:线性表L已存在。操作结果:返回L中数据元素个数
int i=0;
LinkList p=L->next; // p指向第一个结点
while(p) // 没到表尾
{
i++;
p=p->next;
}
return i;
}

Status Getelem(LinkList L,int i,ElemType e){
int p;
LinkList q;
q=L;
if(i<1||i>ListLength(L))
return ERROR;
for(p=0;p<i;p++){
q=q.next;
}
e=q.data;
return OK;
}


void LocateElem(LinkList L,ElemTyp e){
LinkList p;
p=L.next;
int j=1,k;
while(p.next!=NULL){
if(p.data==e){
printf("该数据在此链表的位置为:%d",j);
k=1;
}
p=p.next;
j++;
}
if(k==0)
printf("所查找的数据不存在");
}


Status ListInsert(LinkList L,int i,ElemType e) // 算法2.9。不改变L
{ // 在带头结点的单链线性表L中第i个位置之前插入元素e
int j=0;
LinkList p=L,s;
while(p&&j<i-1) // 寻找第i-1个结点
{
p=p->next;
j++;
}
if(!p||j>i-1) // i小于1或者大于表长
return ERROR;
s=(LinkList)malloc(sizeof(LNode)); // 生成新结点
s->data=e; // 插入L中
s->next=p->next;
p->next=s;
return OK;
}


Status ListDelete(LinkList L,int i,int e) // 算法2.10。不改变L
{ // 在带头结点的单链线性表L中,删除第i个元素,并由e返回其值
int j=0;
LinkList p=L,q;
while(p->next&&j<i-1) // 寻找第i个结点,并令p指向其前驱
{
p=p->next;
j++;


}
if(!p->next||j>i-1) // 删除位置不合理
return ERROR;
q=p->next; // 删除并释放结点
p->next=q->next;
e=q->data;
free(q);
return OK;
}


void ListTraverse(LinkList L)
// vi的形参类型为ElemType,与bo2-1.cpp中相应函数的形参类型ElemType&不同
{ // 初始条件:线性表L已存在。操作结果:依次对L的每个数据元素调用函数vi()
LinkList p=L.next;
while(p!=NULL)
{
printf("%5d",p.data);
p=p->next;
}
printf("\n");
}


int main()
{
LinkList L;
int e;
InitList(L);
ListInsert(L,1,-1);
ListInsert(L,1,21);
ListInsert(L,1,13);
ListInsert(L,1,24);
ListInsert(L,1,8);
ListTraverse(L);
printf("链表长度为:%d",ListLength(L));
printf("是否为空表%d(1:空 0:不空)\n",ListEmpty(L));
GetElem(S,3,e);
printf("第三个元素%d\n",e);
printf("24的位置%d\n",LocateElem(L,24));
ListInsert(L,4,0);
ListTraverse(L);
ListDelete(L,5,e);
ListTraverse(L);

}

在调试时总是提示函数InitList L=(LinkList)malloc(sizeof(LNODE)) invalid use of void expression.


[解决办法]
#include <stdio.h>
#include<stdlib.h>
#include<malloc.h>

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -1

typedef int ElemType;
typedef int Status;
typedef struct LNode{
//定义结点
ElemType data;
struct LNode *next;
}LNode,*LinkList;

void InitList(LinkList &L){
L=(LinkList)malloc(sizeof(LNode));
if(!L)
exit(OVERFLOW);
L->next=NULL;
}
void DestroyList(LinkList L){
LinkList q;
while(L){
q=L->next;
free(L);
L=q;
}

}


void ClearList(LinkList L){
LinkList p,q;
p=L->next;
while(p){
q=p;
free(p);
p=q->next;
}
L->next=NULL;
}

Status Listempty(LinkList&L){
if(L->next)
return FALSE;
else
return TRUE;
}


int ListLength(LinkList L)
{ // 初始条件:线性表L已存在。操作结果:返回L中数据元素个数
int i=0;
LinkList p=L->next; // p指向第一个结点
while(p) // 没到表尾
{
i++;
p=p->next;
}
return i;
}

Status Getelem(LinkList L,int i,ElemType e){
int p;
LinkList q;
q=L;
if(i<1
[解决办法]
i>ListLength(L))
return ERROR;
for(p=0;p<i;p++){
q=q->next;
}
e=q->data;
return OK;
}


void LocateElem(LinkList L,ElemType e){
LinkList p;
p=L->next;
int j=1,k;
while(p->next!=NULL){
if(p->data==e){
printf("该数据在此链表的位置为:%d",j);
k=1;
}
p=p->next;
j++;
}
if(k==0)


printf("所查找的数据不存在");
}


Status ListInsert(LinkList L,int i,ElemType e) // 算法2.9。不改变L
{ // 在带头结点的单链线性表L中第i个位置之前插入元素e
int j=0;
LinkList p=L,s;
while(p&&j<i-1) // 寻找第i-1个结点
{
p=p->next;
j++;
}
if(!p
[解决办法]
j>i-1) // i小于1或者大于表长
return ERROR;
s=(LinkList)malloc(sizeof(LNode)); // 生成新结点
s->data=e; // 插入L中
s->next=p->next;
p->next=s;
return OK;
}


Status ListDelete(LinkList L,int i,int e) // 算法2.10。不改变L
{ // 在带头结点的单链线性表L中,删除第i个元素,并由e返回其值
int j=0;
LinkList p=L,q;
while(p->next&&j<i-1) // 寻找第i个结点,并令p指向其前驱
{
p=p->next;
j++;
}
if(!p->next
[解决办法]
j>i-1) // 删除位置不合理
return ERROR;
q=p->next; // 删除并释放结点
p->next=q->next;
e=q->data;
free(q);
return OK;
}


void ListTraverse(LinkList L)
// vi的形参类型为ElemType,与bo2-1.cpp中相应函数的形参类型ElemType&不同
{ // 初始条件:线性表L已存在。操作结果:依次对L的每个数据元素调用函数vi()
LinkList p=L->next;
while(p!=NULL)
{
printf("%5d",p->data);
p=p->next;
}
printf("\n");
}


int main()
{
LinkList L;
int e;//e没有初始化,下面会挂的
InitList(L);
ListInsert(L,1,-1);
ListInsert(L,1,21);
ListInsert(L,1,13);
ListInsert(L,1,24);
ListInsert(L,1,8);
ListTraverse(L);
printf("链表长度为:%d",ListLength(L));
printf("是否为空表%d(1:空 0:不空)\n",Listempty(L));
Getelem(L,3,e);
printf("第三个元素%d\n",e);
//printf("24的位置%d\n",LocateElem(L,24));
LocateElem(L,24);
ListInsert(L,4,0);
ListTraverse(L);
ListDelete(L,5,e);
ListTraverse(L);

}


这改得我想吐啊,单词都各种错误

读书人网 >C语言

热点推荐