| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 581 人关注过本帖
标题:帮忙看下错误在哪里?关于链表操作
只看楼主 加入收藏
cgm1216
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2008-9-8
收藏
 问题点数:0 回复次数:4 
帮忙看下错误在哪里?关于链表操作
#include"stdio.h"
#include"stdlib.h"
#include "stdlib.h"
#define Len sizeof( struct Node)
#define ERROR 0
#define OK 1
typedef  int  ElemType;
typedef struct Node  /*单链表的存储结构*/
  {ElemType data ;
  struct Node *next;
  }Node,*LinkList;
 
LinkList *create_LinkList(int n)/*单链表输入函数*/
 {int i;
   LinkList *head,*s,*p;
   head=(LinkList)malloc(Len);
   head->next=NULL;
    p=head ;
    scanf("%d,",&p->data);
    for(i=0;i<n;i++)
   {s=(LinkList)malloc(Len);
    scanf("%d,",&s->data);
    p->next=s;
    p=s;
   }
   s->next=NULL;
   return (head);
 }
   
 
 

  
  int InsList(LinkList L,int i,ElemType e)/*单链表插入函数*/
   { Node * pre ,*s;
     int k;
     if(i<1) return(ERROR) ;
     pre=L;k=0;
     while(pre!=NULL&&k<i-1)
     {pre=pre->next;
      k++;
     }
     if(!pre)
     {printf("插入位置不合理!");
      return(ERROR);
     }
     s=(Node*)malloc(sizeof(Node));
     s->data=e;
     s->next=pre->next;
     pre->next=s;
     return(OK);
     }
    
     int DelList(LinkList L,int i,ElemType *e)/*单链表删除函数*/
     { Node *pre,*r;
        int k;
        pre=L;k=0;
        while(pre->next!=NULL&&k<i-1)
         {
          pre=pre->next;
          k=k+1;
         }
         if(!(pre->next))
        { printf("删除结点i位置不合理!");
          return(ERROR);
         }
         r=pre->next;
         pre->next=pre->next->next;
         *e=r->data;
         free(r);
         return OK;
     }
    
     LinkList MergeLinkList(LinkList LA,LinkList LB)/*合并两个有序单链表函数*/
     {Node *pa,*pb,*r;
      LinkList LC;
      pa=LA->next;
      pb=LB->next;
      LC=LA;
      LC->next=NULL;
      r=LC;
      while(pa!=NULL&&pb!=NULL)
      {if(pa->data<=pb->data)
        { r->next=pa;
          r=pa;
          pa=pa->next;}
          else
          { r->next=pb;
          r=pb;
          pb=pb->next;}
      }
        if(pa)
        r->next=pa;
        else
        r->next=pb;
        free(LB);
        return(LC);  
  }
  void print_LinkList(  LinkList *head)/*单链表输出函数*/
   {LinkList *p;
    p=head;
    while(p!=NULL)
    {
     printf("%d",p->data);
     p=p->next;/*让p指向下一个结点*/
    }
    if(p==NULL)
    {
    printf("^\n\n\n");
    }
   }
   
   
 main()
 { int number1,number2,i,j,m,n; /*保存输入数字个数的变量*/
   LinkList  *head1,*head2,*head3;/*head是保存单链表的表头结点地址的指针*/
   printf("请输入您要输入第一个的数组的个数:");
   scanf("%d",&number1);
   printf("请输入您要输入的数字(中间用逗号隔开):");
   head1=create_LinkList(number1);
   print_LinkList(head1);
   printf("请输入您要插入的数和位置(中间用逗号隔开):");
   scanf("%d,%d",&m,&i);
   printf("插入后的新的数组:");
   InsList(L,i,e);
   print_LinkList(head1);
   printf("请输入您要删除的位置:");
   scanf("%d",&j);
   printf("删除后的新的数组:");
   DelList(L,i,&n);
   printf("删除的数为 %d",e);
   print_LinkList( head1);
   printf("请输入您要输入第二个的数组的个数:");
   scanf("%d",&number2);
   printf("请输入您要输入的数字(中间用逗号隔开):");
   head2=create_LinkList(number2);
   print_LinkList( head2);
   head3=MergeLinkList(head1,head2);
   printf("第一个数组和第二个数组合并后新数组为:");
   print_LinkList( head3);
   }
搜索更多相关主题的帖子: 链表 
2008-09-21 11:40
灭火的风
Rank: 2
来 自:杭州
等 级:论坛游民
帖 子:161
专家分:10
注 册:2006-6-15
收藏
得分:0 
看病的时候一般要说症状吧?
2008-09-21 11:46
cgm1216
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2008-9-8
收藏
得分:0 
回复 1# cgm1216 的帖子
为结点申请空间就又错误
2008-09-21 13:36
一起补天
Rank: 2
等 级:论坛游民
帖 子:73
专家分:61
注 册:2008-9-19
收藏
得分:0 
试试这个

LinkList *create_LinkList(int n)/*单链表输入函数*/
{int i;
   LinkList *head,*s,*p;
   head=(LinkList)malloc(Len);
   head->next=NULL;
   for(i=0;i<n;i++)
   {s=(LinkList)malloc(Len);
    scanf("%d,",&s->data);
    s->next=head->next;
    head->next=s;
   }
      return (head);
}
2008-09-21 14:17
小辛巴
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-8-30
收藏
得分:0 
顶楼上的解答!!呵呵,想法一样,关键是原来的程序没有把  *s  新生成的结点放在链表中
2008-09-21 23:16
快速回复:帮忙看下错误在哪里?关于链表操作
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023308 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved