| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 451 人关注过本帖
标题:链表,帮帮我修改一下这个代码!
只看楼主 加入收藏
杉梓狮
Rank: 1
来 自:wenzhou
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-9-12
收藏
 问题点数:0 回复次数:2 
链表,帮帮我修改一下这个代码!
#include <malloc.h>
#include<stdio.h>
#define ok 1
#define error 0


typedef int Elemtype;
typedef struct Node
{Elemtype data;
 struct Node *next;
 }Node,*LinkList;


 int Initlist(LinkList *L)                /*初始化链表*/
 {
  *L=(LinkList)malloc(sizeof(Node));
 (*L)->next=NULL;
 return(ok);
 }


 void  createlist(LinkList *L,Elemtype a[],int n)      /*创建链表*/
{Node *p,*r;
  int i;
 r=L;
 for (i=0;i<=n;i++)
   {
     p = (Node *) malloc (sizeof (Node));
     p->data=a[i];
     p->next=r->next;
     r->next =p;
     p = r;
   }
}

int  inslist(LinkList L,int i,Elemtype e)             /*插入元素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=k+1;
}
if(!pre)
{printf("位置不合理");
return error;
}
s=(Node*)malloc(sizeof(Node));
s->data=e;
s->next=pre->next;pre->next=s;
return ok;
}

int  DelList_L(LinkList L, int i, Elemtype *e)            /*删除链表中的第i个元素*/
 {Node *p,*q;
 int j;
 p = L;
 j = 0;
   while (p->next && j < i-1)
     {
       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;
}


LinkList MergeLinkList(LinkList La,LinkList Lb,LinkList Lc)      /*合并链表*/
{
    Node *pa,*pb,*r;
    pa=La->next;
    pb=Lb->next;
    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;
}

                                                          /*打印链表*/
int printlist(LinkList L)
{ Node *p;
  p=L->next;
 while(p!=NULL)
 { printf("%5d",p->data); p=p->next; }
}



void main()
{
 LinkList la;
 LinkList lb;
 LinkList lc;
  Elemtype a[]={6,5,4,3,1};
  Elemtype b[]={9,6,5,2,1};
  Elemtype x;

  Initlist(la);
  createlist(&la,a,3);
  printlist(&la);
  printf("\n");

  Initlist(lb);
  createlist(&lb,b,2);
  printlist(&lb);
  printf("\n");

  Initlist(lc);
  MergeLinkList(&la,&lb,&lc);
  printlist(&lc);
  printf("\n");

  inslist(&la,6,10);
  printlist(&la);
  printf("\n");

  DelList_L(&la,3,&x);
  printlist(&la);
 getch();
}
搜索更多相关主题的帖子: 链表 代码 
2008-09-26 20:23
油豆
Rank: 1
等 级:新手上路
帖 子:67
专家分:0
注 册:2006-3-29
收藏
得分:0 
对typedef不熟悉
typedef int Elemtype;
typedef struct Node
{Elemtype data;
struct Node *next;
}Node,*LinkList;    /*此处已经定义了LinkList为结构体指针,所以,要想定义结构体指针变量,就要这样定义:LinkList L就可以了,不能用LinkList *L这种定义*/


int Initlist(LinkList *L 此处定义错误 )               /*初始化链表*/
{
  *L=(LinkList)malloc(sizeof(Node));
(*L)->next=NULL;
return(ok);
}


void  createlist(LinkList *L此处定义错误 ,Elemtype a[],int n)      /*创建链表*/
{Node *p,*r;
  int i;
r=L;
for (i=0;i<=n;i++)
   {
     p = (Node *) malloc (sizeof (Node));
     p->data=a[i];
     p->next=r->next;
     r->next =p;
     p = r;
   }
}

2008-09-26 21:45
油豆
Rank: 1
等 级:新手上路
帖 子:67
专家分:0
注 册:2006-3-29
收藏
得分:0 
指针变量引用错误
*L=(LinkList)malloc(sizeof(Node)); 这种引用也是错误的,应该是L=(LinkList)malloc(sizeof(Node));

2008-09-26 21:47
快速回复:链表,帮帮我修改一下这个代码!
数据加载中...
 
   



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

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