| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 573 人关注过本帖
标题:简单的链表 可是内存不可读。。。
只看楼主 加入收藏
xuluxi
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-3-10
结帖率:0
收藏
已结贴  问题点数:20 回复次数:7 
简单的链表 可是内存不可读。。。
#include <stdio.h>
#include<malloc.h>
typedef struct  node
{
    int data;
  struct node *next;
}  link;
void create(struct node *&l,int a[],int n)
{
    link *s;int i;
    l=(link *)malloc(sizeof(link));
    l->next=NULL;
    for(i=0;i<n;i++)
    {
        s=(link *)malloc(sizeof(link));
        s->data=a[i];
        s->next =l->next;
        l->next=s;
    }
}
void change (struct node *a,struct node *b,struct node *c)
{
   struct node *p=a->next,*q=b->next,*m=c->next;
    while(p!=NULL&&q!=NULL)
    {
        if(p->data<q->data)
        {
            m->data=p->data;
            m=m->next;
            p=p->next;
        }
        else if(p->data>q->data)
        {
            m->data=q->data;
            m=m->next;
            q=q->next;
            
        }
        else
        {
            m->data=q->data;
            m=m->next;
            p=p->next;
            q=q->next;
        }
    }
        while(q->next!=NULL)
        {
           m->next->data=q->data;
           m=m->next;
           q=q->next;
        }
        while(p->next!=NULL)
        {
           m->next->data=p->data;
           m=m->next;
           p=p->next;
        }
     m->next=NULL;
}
void displist(link *l)
{
    link *r=l;
    while(r!=NULL)
    {
        printf("%d",r->data);
        r=r->next;
    }
    printf("\n");
}
main()
{
    int a[3],b[3],c[20]={0};
    printf("1\n")   ;
    for(int i=0;i<3;i++)
    {
        scanf("%d",&a[i]);
    }
    printf("2\n") ;
      for(int i=0;i<3;i++)
    {
        scanf("%d",&b[i]);
    }
    link *k,*h,*n;
    create(k,a,3);
    create(h,b,3) ;
    create(n,c,3);
     change(k,h,n);
    displist(n) ;
}
搜索更多相关主题的帖子: 内存 链表 
2010-03-10 12:49
陈大师
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:231
专家分:1038
注 册:2009-11-4
收藏
得分:6 
看不懂你想要干什么。。说下先吧
2010-03-10 13:05
xuluxi
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-3-10
收藏
得分:0 
就是两组已经升序排好的数组 归并成一个递增的数组,用链表来做的。。。
2010-03-10 13:08
刮目相看
Rank: 2
等 级:论坛游民
帖 子:25
专家分:30
注 册:2009-11-23
收藏
得分:6 
没太看懂
前两天复习的时候,是直接用的起泡法排的单链表。
2010-03-11 06:59
刮目相看
Rank: 2
等 级:论坛游民
帖 子:25
专家分:30
注 册:2009-11-23
收藏
得分:0 
typedef node* list;

void swap(list head,list a,list b)/*交换单链表中相邻2元素*/
{  
     list tmp=head;
     a->next=b->next;
     b->next=a;
         for(;;)
         {
                if(tmp->next==a)
                {
                tmp->next=b;
                break;
                }
                tmp=tmp->next;
         }   
}

list sort_list(list head)/*起泡排序*/
{
 list p;
 list end=NULL;
 
 while(end!=head->next)
 {
                       p=head->next;
                       while(p->next!=end)
                       {
                                          if(p->data>p->next->data){
                                          swap(head,p,p->next);
                                          continue;
                                          }
                                          p=p->next;
                       }
                       printf("\n");
                       end=p;
 }


}

2010-03-11 07:04
陈大师
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:231
专家分:1038
注 册:2009-11-4
收藏
得分:0 
用了代码框后。。改不了颜色。。不知道怎么搞的。。
#include <stdio.h>
#include<malloc.h>
typedef struct  node
{
    int data;
  struct node *next;
}  link;
void create(struct node *&l,int a[],int n)
{
    link *s;int i;
    l=(link *)malloc(sizeof(link));
    l->next=NULL;
    for(i=0;i<n;i++)
    {
        s=(link *)malloc(sizeof(link));
        s->data=a[i];
        s->next =l->next;
        l->next=s;
    }
}
void change (struct node *a,struct node *b,struct node *c)
{
   struct node *p=a->next,*q=b->next,*m=c->next;
    while(p!=NULL&&q!=NULL)
    {
        if(p->data<q->data)
        {
            m->data=p->data;
            m=m->next;
            p=p->next;

        }
        else if(p->data>q->data)
        {
            m->data=q->data;
            m=m->next;
            q=q->next;
            
        }
        else
        {
            m->data=q->data;
            m=m->next;
            p=p->next;
            q=q->next;

        }
    }
/*
 * 你仔细看看上面蓝色部分的代码,当上面的那个while执行完后,m节点、    \
 * p节点、q节点的位置在哪?看看红色改过后的和你原来的你就明白了        \
 */
        while(q!=NULL)  
        {
           m->data=q->data;
           m=m->next;
           q=q->next;
        }
        while(p!=NULL)
        {
           m->data=p->data;
           m=m->next;
           p=p->next;
        }
    m=NULL;
}
void displist(link *l)
{
    link *r=l->next;
    while(r!=NULL)
    {
        printf("%d ",r->data);
        r=r->next;
    }
    printf("\n");
}
main()
{
    int i, a[3],b[3],c[20]={0};
    printf("1\n")   ;
    for(i=0;i<3;i++)
    {
        scanf("%d",&a[i]);
    }
    printf("2\n") ;
      for(i=0;i<3;i++)
    {
        scanf("%d",&b[i]);
    }
    link *k,*h,*n;
    create(k,a,3);
    create(h,b,3) ;
    create(n,c,3); //这里就没必要这样了,不过也没关系
     change(k,h,n);
    displist(n) ;
}

[ 本帖最后由 陈大师 于 2010-3-11 19:34 编辑 ]
2010-03-11 14:09
qq113551470
Rank: 2
等 级:论坛游民
帖 子:13
专家分:12
注 册:2010-3-11
收藏
得分:6 
请问你这改了的代码????
2010-03-11 15:52
qq113551470
Rank: 2
等 级:论坛游民
帖 子:13
专家分:12
注 册:2010-3-11
收藏
得分:0 
执行的时候执行不出来啊     请问您的代码  两个数组按照升序连接的代码在哪里呢?
2010-03-11 15:53
快速回复:简单的链表 可是内存不可读。。。
数据加载中...
 
   



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

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