| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 617 人关注过本帖
标题:链表急救
只看楼主 加入收藏
想你的天空
Rank: 2
等 级:新手上路
威 望:5
帖 子:610
专家分:0
注 册:2004-12-30
收藏
 问题点数:0 回复次数:8 
链表急救
#include"stdio.h"
typedef struct node
  {  int data;
     struct node *next;
  }NODE;
  int x,i;
  NODE *creat()
{  NODE *head,*p,*s;
    head=(NODE*)malloc(sizeof(NODE));
    p=head;
    printf("输入整数,以0标志结束\n");
    scanf("%d",&x);
    while(x!=0)
   {  s=(NODE*)malloc(sizeof(NODE));
      s->data=x;
      p->next=s;
      s->next=NULL;
      p=s;
      scanf("%d",&x);
   }
   p->next=NULL;
   p=head;
   head=head->next;
   free(p);
   return head;
}
void delete(head,x)
{  NODE *head,*p,*q;
   if(head==NULL) printf("链表下益\n");
   if(head->data==x)
   { p=head;
     head=head->next;
     free(p);
   }
   else
   { q=head; p=head->next;
     while(p!=NULL&&p->data!=x)
      if(p->data!=x)
      { q=p;p=p->next;
      }
      if(p!=NULL)
      { q->next=p->next;
        free(p);
      }
      else printf("没找到\n");
   }
}
main()
{  NODE *head,*p;
    head=creat();
   p=head;
   while(p!=NULL)
    { printf("%d",p->data);
      p=p->next;
    }
   printf("输入要删除的节点:");
   scanf("%d",&x);
   delete(head,x);
    p=head;
    while(p!=NULL)
    { printf("%d",p->data);
      p=p->next;
    }
}   //谁能调通就把200块拿去吧

[此贴子已经被作者于2005-3-28 14:18:27编辑过]


搜索更多相关主题的帖子: 链表 急救 
2005-03-28 14:06
lntuzjc
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2005-3-23
收藏
得分:0 
你这个程序写得太乱了!给你点建议:
 (1)没有必要把X和I定义为全局变量;
 (2)在删除函数中,两个形参的类型应该定义;
如果你想要链表运算的程序,可以发个贴!但是,这个程序,修改量比较大,会改得面目全非的!
2005-03-29 18:00
想你的天空
Rank: 2
等 级:新手上路
威 望:5
帖 子:610
专家分:0
注 册:2004-12-30
收藏
得分:0 
我真想扣你200的积分, 我只改了一点就行了。  我的跟书上差不多, 你说书烂啊?

2005-03-29 19:26
想你的天空
Rank: 2
等 级:新手上路
威 望:5
帖 子:610
专家分:0
注 册:2004-12-30
收藏
得分:0 
看在只有你回帖子的份上,送你200积分~   反正我也拿不回了

2005-03-29 19:29
lntuzjc
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2005-3-23
收藏
得分:0 
不好意思!无功受禄。
有问题多交流!
2005-03-30 12:53
想你的天空
Rank: 2
等 级:新手上路
威 望:5
帖 子:610
专家分:0
注 册:2004-12-30
收藏
得分:0 
好啊, 你QQ是多少?(注意: 不轮男女)

2005-03-30 15:06
zhtmark
Rank: 1
等 级:新手上路
帖 子:100
专家分:0
注 册:2005-3-25
收藏
得分:0 

//改的程序如下: #include"stdio.h" #include"stdlib.h" //------这是你用分配函数时所用的库,必要

struct node { int data; struct node *next; }NODE; //现在你的NODE是全局变量.其实也没用上. struct node * cc() //--------前面的指针是struct node类型的 { int x; struct node *head=NULL,*p,*s; //---要写成这样才对,NODE是变量,不能定义别人了. printf("输入整数,以0标志结束:"); scanf("%d",&x); while(x!=0) { s=(struct node*)malloc(sizeof(struct node)); //开辟空间把首地址给s s->data=x; //新的空间的值域部分赋键盘输入值 s->next=NULL; if(head==NULL) head=s; else p->next=s; p=s; printf("输入整数,以0标志结束:"); scanf("%d",&x); //输入下面一系列的数 } //p->next=NULL; //---我不明白你下面的话什么意思.我注视掉了 //p=head; //head=head->next; //free(p); //---这里怎么还要释放? return head; }

struct node * dd(struct node *head,int x) //这是的delete好像不能用,还是换成dd能使,delete是电脑的保留字 { struct node *p,*q; //---同上 if(head==NULL) {printf("链表下益\n"); return head;} //--返回吧!! if(head->data==x) { //--对 p=head; head=head->next; free(p); return head; } //--对 else { q=head; p=head->next; while((p!=NULL)&&(p->data!=x)) //--这样写,我觉得好些,自己也看的清. if(p->data!=x) { q=p; p=p->next;} if(p!=NULL) { q->next=p->next; free(p); } else printf("没找到\n"); } return head; }

void main() //----这样写好一点 { int x; struct node *head,*p; //---同上 head=cc(); p=head; while(p!=NULL) { printf("%5d",p->data); //----这里是%5d看的清楚点. p=p->next; } printf("\n输入要删除的节点:"); scanf("%d",&x); head=dd(head,x); //这里还是要返回的,因为当你删除的是第一个元素时,就会找不到指针了. p=head; while(p!=NULL) { printf("%5d",p->data); //----这里是%5d看的清楚点. p=p->next; } printf("\n"); //---这里也看的清楚点 } //你看看吧.我试了,可以了.


zhtmark QQ:451361060
2005-03-30 17:32
lntuzjc
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2005-3-23
收藏
得分:0 
104873567
2005-03-30 22:39
zhtmark
Rank: 1
等 级:新手上路
帖 子:100
专家分:0
注 册:2005-3-25
收藏
得分:0 
请问这位同志笑什么呢?我也笑

zhtmark QQ:451361060
2005-03-31 11:20
快速回复:链表急救
数据加载中...
 
   



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

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