那位高手给调以下C++程序
#include"stdio.h"
#include"malloc.h"
#define null 0
typedef struct
{
int data;
lnode *next;
}lnode *linklist; //建表子函数
void creat(linklist &l,int n)
{
linklist p;
l=(linklist)malloc(sizeof(lnode);
l->next=null;
for(i=n;i>0;i--)
{
p=(linklist)malloc(sizeof(lnode))
scanf(&(p->data));
p->next=l->next;
l->next=p;
}
}
// 遍历子函数
void travser(linklist l)
{ //依次输出单链表l的各个元素
p=l->next;
while (p)
{
printf(p->data);
p=p->next;
}
}
// 插入子函数
status insert(linklist &l,int i,elemtype e)
{ //在带头结点的单链表l中第i个位置前插入元素e
p=l;j=0;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(!p||j>i-1) return error;
s=(linklist)malloc(sizeof(lnode));
s->data=e;
s->next=p->next;
p->next=s;
return ok;
}
//删除子函数
status delete(linklist l,int i)
{ //删除带头结点的单链表l中第i个元素,用e返回其值
p=l;j=0;
while(p->next&&j<i-1)
{ p=p->next;
j++;
}
if(!p->next||j>i-1) return error;
s=p->next;
p->next=s->next;
e=s->data;
free(s);
return ok;
}
void main()
{
linklist head,stu;
int del_num;
printf("input records:\n");
head=creat();
print(head);
printf("\ninput the deleted number: ");
scanf("%d",&del_num);
while(dei_num!=0)
{
head=del(head,del_num);
print(head);
printf("input the deleted number: ");
scanf("%d",&del_num);
}
printf("\ninput the inserted number: ");
stu=(linklist)malloc(sizeof(lnode));
scanf("%d",&stu->data);
while(stu->data!=0)
{
head=insert(head,stu);
printf("input the inserted number: ");
stu=(linklist)malloc(sizeof(lnode));
scanf("%d",&stu->data);
}
}
那里有错误帮改一下,谢谢!
追问:我是想让修改程序,通过调试,你所给的没删除元素操作?
答案:#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define OK 1
#define ERROR 0
#define OVERFLOW 0
typedef int ElemType;
typedef int Status;typedef struct LNode
{
ElemType data;
struct LNode *next;
}*Link,*Position;
typedef struct
{
Link head,tail;
int len;
}LinkList;
Status InitList(LinkList &L)
{
L.head=(Link)malloc(sizeof(LNode));
if(!L.head)
exit(OVERFLOW);
L.tail=L.head;
L.len=0;
L.head->next=NULL;
return OK;
}
Status MakeNode(Link &p,ElemType e)
{
p=(Link)malloc(sizeof(LNode));
if(!p)
exit(OVERFLOW);
p->data=e;p->next=NULL;
return OK;
}
int ListLength(LinkList L)
{
return(L.len);
}
Status LocatePos(LinkList L,int i,Link &p)
{
if((i>ListLength(L))||(i<0))
return ERROR;
p=L.head;
while(i--)
p=p->next;
return OK;
}
Status InsFirst(Link h,Link s)
{
s->next=h->next;
h->next=s;
return OK;
}
Status ListInsert_L(LinkList &L,int i,ElemType e)
{
Link h,s;
if(!LocatePos(L,i-1,h))
return ERROR;
if(!MakeNode(s,e))
return ERROR;
InsFirst(h,s);
++L.len;
return OK;
}
Status DelFirst(Link h,Link &q)
{
if (!h->next)
return ERROR;
q=h->next;
h->next=q->next;
return OK;
}
Status ListDelete_L(LinkList &L,int i,ElemType &e)
{
Link h,q;
if (!LocatePos(L,i-1,h))
return ERROR;
DelFirst(h,q);
--L.len;
return OK;
}
Status Append(LinkList &L,Link s)
{
Link p;
L.tail->next=s;
p=s;
++L.len;
while(p->next)
{
p=p->next;
++L.len;
}
L.tail=p;
return OK;
}
Position NextPos(LinkList L,Link p)
{
Link q;
q = L.head;
while (q && q != p)
q = q->next;
if(q && q != L.tail)
return q->next;
else
return NULL;
}
void FreeNode(Link &p)
{
free(p);
p = NULL;
}
Position GetHead(LinkList L)
{
return L.head;
}
ElemType GetCurElem(Link p)
{
return p->data;
}
int compare000(ElemType a,ElemType b)
{
return(a-b);
}
Status MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc,int(*compare000)(ElemType,ElemType))
{
if(!InitList(Lc))
return ERROR;
Link ha=GetHead(La);
Link hb=GetHead(Lb);
Link pa=NextPos(La,ha);
Link pb=NextPos(Lb,hb);
Link q;
while(pa&&pb)
{
int a=GetCurElem(pa);
int b=GetCurElem(pb);
if((*compare000)(a,b)<=0)
{
DelFirst(ha,q);
Append(Lc,q);
pa=NextPos(La,ha);
}
else
{
DelFirst(hb,q);
Append(Lc,q);
pa=NextPos(Lb,hb);
}
}
if(pa)
Append(Lc,pa);
else
Append(Lc,pb);
FreeNode(ha);
FreeNode(hb);
return OK;
}
void Show_L(LinkList L)
{
Link p;
p=L.head->next;
while(p)
{
printf(" %d ",p->data);
p=p->next;
}
printf("\n");
}
void main()
{
LinkList La;
LinkList Lb;
LinkList Lc;
int a,b,e,f,i;
printf("请输入La表的长度:\n");
scanf("%d",&a);
InitList(La);
for(i=1;i<=a;i++)
{
printf("请输入第%d个元素\n",i);
scanf("%d",&e);
ListInsert_L(La,i,e);
}
printf("请输入Lb表的长度:\n");
scanf("%d",&b);
InitList(Lb);
for(i=1;i<=b;i++)
{
printf("请输入第%d个元素\n",i);
scanf("%d",&f);
ListInsert_L(Lb,i,f);
}
MergeList_L(La,Lb,Lc,compare000);
Show_L(Lc);
}
上一个:请问c++怎么做一个定时程序
下一个:计算机c与c++有何不同?