当前位置:编程学习 > C/C++ >>

那位高手给调以下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++有何不同?

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,