| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1084 人关注过本帖
标题:链表插入程序错在哪里-——为什么循环是死循环 请高手赐教
只看楼主 加入收藏
hnyanyafei
Rank: 1
来 自:洛阳
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-6-21
结帖率:100%
收藏
 问题点数:0 回复次数:3 
链表插入程序错在哪里-——为什么循环是死循环 请高手赐教
#include<stdlib.h>
#include<iostream>
using namespace std;
typedef struct node{
    int data;
    struct node *next;
}Lnode,*linknode;
Lnode *creat(int n){
Lnode *H,*p,*s;
cout<<"链表已创建请连续输入链表内数据"<<endl;
int x,i;
H=(Lnode*)malloc(sizeof(Lnode));
p=H;
for(i=0;i<n;i++){
        cin>>x;
        s=(Lnode*)malloc(sizeof(Lnode));
        s->data=x;
        s->next=NULL;
        p->next=s;
        p=s;
}
p->next=NULL;
return H;//返回头结点
}//创建链表
/*输出链表*/
Lnode*print(Lnode *H){
    Lnode *p,*s;
    p=H->next;
    while(p)
    {
    cout<<p->data<<" ";
    s=p->next;
    p=s;
    }
    cout<<endl;
    return 0;
}//链表输出函数
linknode init(linknode la,linknode lb,int n)
{    linknode p,q;
    int f=1,i;
    p=la;
    q=p->next;
    if(!n)
      p->next=lb;
    else
    {
        for(i=0;i<n;i++)
        {
            if(q->data>=lb->data)
            {
             q->next=lb;
             lb->next=q;
             i=0;//i等于以表示已经插入链中
             break;
            }
            else
            {
                p=p->next;
                q=q->next;
            }

        }
       if(i)
        q->next=lb;
    }
 return 0;
}
  

void main ()
{
int x,n;
    Lnode *h,*lb;
    cout<<"请输入链表的长度:";
    cin>>n;
    h=creat(n);//注意指针的引用
     print(h);//指针的正确使用原先写为print(h)造成程序不能调用
    lb=(Lnode*)malloc(sizeof(Lnode));
    cout<<"请输入新节点数据";
    cin>>x;
    lb->data=x;
    cout<<lb->data;
    lb->next=NULL;
    init(h,lb,n);
    print(h);
}
搜索更多相关主题的帖子: 链表 
2008-11-11 22:20
jdshaoheyi
Rank: 1
等 级:新手上路
帖 子:133
专家分:5
注 册:2008-11-6
收藏
得分:0 
你的算法,我看了很久,没有注释是一个很重要的缺陷.我先看了一下创建和输出部分,插入部分实在是很难看懂!
#include<stdlib.h>
#include<iostream>

using namespace std;


typedef struct node
{
    int data;
    struct node *next;
}Lnode,*linknode;

/*先介绍一下次创建函数的具体步骤:先为H分配空间,并且使其next为NULL,然后在循环当中不断为S分配空间,并为其指向数据,
下一步是使S的next指向H,然后,再将S赋给H,也就是说H现在在S的位置,然后的循环就是不断的重复这个过程,实际上H最终还是头结点*/

Lnode *creat(int n)
{
   Lnode *H,*s;  //H为头结点
      
   int x,i;
   H=(Lnode*)malloc( sizeof(Lnode) );  //为H分配存储空间
   
   H->next=NULL; //带头结点
  
   for(i=1;i<=n;i++)
   {     
        cout <<"请输入数据:\n";
        cin>>x;
        
        s=(Lnode*)malloc(sizeof(Lnode));//为S分配存储空间
        
        s->data=x;  //为S数据域赋值
        
        s->next=H;
        
        H=s;
        
        
   }
        return H;//返回头结点
}//创建链表



/*输出链表*/


Lnode *print(Lnode *H)
{
    Lnode *p;
   
    p=H;
   
    while(p->next)
    {
     cout<<p->data<<" ";
     p=p->next;
    }
    cout<<endl;
    return 0;
}//链表输出函数
2008-11-12 22:42
hnyanyafei
Rank: 1
来 自:洛阳
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-6-21
收藏
得分:0 
谢了
谢谢了我以后会注意程序注释的!
2008-11-17 22:05
什么呢
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-11-18
收藏
得分:0 
其实链表插入操作很简单,只要改下插入节点的next域指向前一节点的next域,前一节点的next域指向插入节点,再将链表长度加1,顺序不能反,搞不懂你为什么还比较节点数据大小,你插入有什么其他要求吗?
2008-11-18 11:17
快速回复:链表插入程序错在哪里-——为什么循环是死循环 请高手赐教
数据加载中...
 
   



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

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