| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 695 人关注过本帖, 1 人收藏
标题:链表的插入
只看楼主 加入收藏
s_k_y
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2008-2-2
结帖率:44.44%
收藏(1)
 问题点数:0 回复次数:9 
链表的插入
这是链表的插入程序,但是运行结果显示不出.不知错在哪里了?
#include "stdlib.h"
#include "malloc.h"

struct node
{
    int data;
    struct node *next;
   
};
struct node *insert_list(struct node *head,int value)
{
   
   struct node *n,*p,*q;
   n=(struct node *)malloc(sizeof(struct node));   

     n->data=value;
     p=head;
     if(head==NULL)
     {
       head=n;
       n->next=NULL;
     }
     else
         {
             while((p->next!=NULL)&&(p->data<value))
               {q=p;p=p->next;}
              if(p->data>=value)
                  { if(p==head)
                       {
                           n->next=head;
                           head=n;                              
                       }
                 else
                     {
                          q->next=n;
                          n->next=p;
                     }
                  }
              else
                  {
                    p->next=n;
                    n->next=NULL;                          
                  }
         }        
     return head;   
}
搜索更多相关主题的帖子: 链表 
2008-10-07 16:24
qfyzy
Rank: 2
等 级:论坛游民
威 望:1
帖 子:380
专家分:86
注 册:2008-2-17
收藏
得分:0 
建议仔细检查程序的别的部分。我添加了如下的部分测试下是对的。
void print(struct node *head){
     while(head!=NULL){
         printf("%d\t",head->data);
         head=head->next;
     }
     putchar(10);
}
     
int main(){
    struct node *head=NULL;
    int n=1;
    while(n){
             scanf("%d",&n);
             head=insert_list(head,n);
             printf("%p\n",head);
             print(head);
    }
    return 0;
}

当对C的经验增加时,它会显的很好用.----Dennis M Ritche如是说
2008-10-07 16:51
s_k_y
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2008-2-2
收藏
得分:0 
谢谢楼上的
这是我的去不程序,先建立个空链表,然后在插入。不过结果有问题。
  #include "stdlib.h"
#include "malloc.h"

struct node
{
    int data;
    struct node *next;
   
};



struct node *create_list(void)
{
   
  struct node *head;
  clrscr();
  head=(struct node*)malloc(sizeof(struct node));   
    if(head!=NULL)
    {
      printf("successful");
      head->next=NULL;   
    }
    else
         printf("fail");

     printf("\nInput any key to return menu...");
   getch();
   menu();
        return head;
}

struct node *insert_list(struct node *head,int value)
{
   
   struct node *n,*p,*q;
   n=(struct node *)malloc(sizeof(struct node));   

     n->data=value;
     p=head;
     if(head==NULL)
     {
       head=n;
       n->next=NULL;
     }
     else
         {
             while((p->next!=NULL)&&(p->data<value))
               {q=p;p=p->next;}
              if(p->data>=value)
                  { if(p==head)
                       {
                           n->next=head;
                           head=n;                              
                       }
                 else
                     {
                          q->next=n;
                          n->next=p;
                     }
                  }
              else
                  {
                    p->next=n;
                    n->next=NULL;                          
                  }
         }
     printf("\nInput any key to return menu...");
   getch();
   menu();            
     return head;   
}

void print_list(struct node *head)
{
     
     struct node *p;
     clrscr();
     p=head->next;
   if(head==NULL)
      {
           printf("the list is null!!");     
      }
    else
        {
            printf("print the numbers: ");
            while(p!=NULL)
            {
                printf(" %d",p->data);
                p=p->next;
               
            }
            
        }
   printf("\nInput any key to return menu...");
   getch();
   menu();   
}

 menu()
{
      int ch,num;
       struct node *head;
        clrscr();
        printf("***********************\n");
        printf("1.create\n");
        printf("2.insert\n");      
        printf("3.print\n");
        printf("4.exit\n");
        printf("***********************\n");
      printf("Input your choose(1-4):");
      scanf("%d",&ch);
     while (ch<1 || ch>4)
    { printf("Your choose is error! Input again!\n");
       printf("Input your choose(1-4):");
       scanf("%d",&ch);
     }
      switch(ch)
      {
           case 1: head=create_list();break;
           case 2:
                   {
                      clrscr();
                     printf("please input the data:");
                     scanf("%d",&num);

                     head=insert_list(head,num);

                     break;
                    }
           case 3: print_list(head);break;
           case 4: exit(0);break;
      }
    getch();

}

int main(void)
{
   
  menu();
 return 0;   
}
2008-10-07 17:38
jz8417
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-10-3
收藏
得分:0 
没有错啊
我看看。。。。

[url=http://www.]成人小游戏[/url] [url]http://www.[/url]
2008-10-07 17:45
s_k_y
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2008-2-2
收藏
得分:0 
谢谢
恩 好的。谢谢了
2008-10-07 17:59
qfyzy
Rank: 2
等 级:论坛游民
威 望:1
帖 子:380
专家分:86
注 册:2008-2-17
收藏
得分:0 
貌似是TC下的程序。
就不运行了,简单看下,问题如下
1,没有stdio.h的头文件。以后注意加上
2,输出的函数有错。总是丛第二个开始打印的,注意看下~

当对C的经验增加时,它会显的很好用.----Dennis M Ritche如是说
2008-10-07 18:24
s_k_y
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2008-2-2
收藏
得分:0 
程序中有stdio.h的头文件,我加过了。输出函数应该没错,我把插入函数去掉,直接在创建链表中输入数据,然后在打印。
2008-10-07 18:38
qfyzy
Rank: 2
等 级:论坛游民
威 望:1
帖 子:380
专家分:86
注 册:2008-2-17
收藏
得分:0 
p=head->next
上来就是这个,第一项呢?

当对C的经验增加时,它会显的很好用.----Dennis M Ritche如是说
2008-10-07 19:23
s_k_y
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2008-2-2
收藏
得分:0 
把那个输出换成p=head;还是有问题。
2008-10-07 20:07
s_k_y
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2008-2-2
收藏
得分:0 
再次谢谢大家了
大家帮忙解答一下了 ,这个问题想了好几天了。
2008-10-07 21:07
快速回复:链表的插入
数据加载中...
 
   



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

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