Luqing的专栏

苹果诱惑了夏娃,砸醒了牛顿,成为了知名手机品牌,主宰了广场舞,是水果界真正的老大?...

实验二 删除奇数结点的链表-----程序实现

 

p35    实验二 删除奇数结点的链表-----程序实现 

求解方法有2种:

  • 第一种是用2个链表A和B,从A中寻找偶数结点,把它链到B链表中,最后输出B链表。参考教材p33。

 

  • 第二种是在一个链表中完成删除奇数结点的操作。目前该程序已经写好,打算下周发布在该网页上。
    很多同学出现的错误多发生在 如下语句中。请参考思考


    完整程序如下:

    1 :  #include <iostream.h>
    2 :  #include <stdlib.h>
    3 : 
    4 :  struct Node
    5 :  {
    6 :   int data;
    7 :   struct Node *next;
    8 :  };
    9 : 
    10 :  struct Node *CreatListF()//用头插法建立单链表
    11 :  {
    12 :  int ch;
    13 :   struct Node *H=NULL;    //链表头指针开始为空
    14 :   struct Node *p; //工作指针
    15 :  // ch=getchar(); //读入第1个字符
    16 :   cin>>ch;
    17 : 
    18 :  // if(ch=='/n')
    19 :  //  cout<<"你已经退出了!!/n";
    20 :  /// else{
    21 :    while(ch!=0){
    22 :     p=(struct Node *)malloc(sizeof(struct Node));//生成新结点
    23 :     p->data=ch;   //将读入的数据放入新结点的数据域中
    24 :     p->next=H;
    25 :     H=p;
    26 :    // ch=getchar(); //读入下一字符
    27 :     cin>>ch;
    28 :    }//while
    29 : 
    30 :   return H;
    31 :  }
    32 : 
    33 : 
    34 :  int length(struct Node * H)
    35 :  {
    36 :   int n=1;
    37 :   struct Node *p=H;
    38 :   if(p==NULL) return -1;
    39 :   else{
    40 :    while (p->next!=NULL)
    41 :    {
    42 :     n++;
    43 :     p=p->next;
    44 :    }
    45 :   }
    46 :   return n;
    47 :  }
    48 : 
    49 : 
    50 :  void Del(struct Node **H)
    51 :  {
    52 :   struct Node *m;
    53 :   struct Node *q=*H;
    54 :   while(q->next!=NULL){
    55 :    struct Node *p;
    56 :    p=q->next;
    57 :    if(p->next!=NULL && p->data%2!=0){
    58 :     q->next=p->next;
    59 :     q=p->next;
    60 :     free(p);    
    61 :    }
    62 :    else
    63 :     q=q->next;
    64 :   }
    65 :   if(q->data%2!=0){
    66 :    q->data=0;
    67 :    //m=q;
    68 :    /// free(m);
    69 :   } 
    70 :   if(((*H)!=NULL) && ((*H)->data%2!=0)  ){
    71 :    m=(*H);
    72 :    (*H)=(*H)->next;
    73 :    free(m);
    74 :   }  
    75 :   
    76 :  }
    77 : 
    78 : 
    79 :  void display(struct Node *H)
    80 :  {
    81 :   struct Node *p;
    82 :   p=H;
    83 :   cout<<"单链表显示:/n";
    84 :   if (p==NULL)
    85 :    cout<<"链表为空!/n";
    86 :      else
    87 :   {
    88 :    while (p->next!=NULL) //链表存在一个以上的结点时
    89 :    {
    90 :     cout<<p->data<<"→";
    91 :     p=p->next;
    92 :    }
    93 :    cout<<p->data; //显示存在一个结点或显示最后一个结点
    94 :   }
    95 :   cout<<endl;
    96 :  }
    97 : 
    98 :  int main()
    99 :  {
    100 : 
    101 :   cout<<"请输入,提示 :回车表示输入完毕!"<<endl;
    102 :  
    103 :   struct Node *H=CreatListF();
    104 : 
    105 :   display(H);
    106 : 
    107 :   cout<<"/n单链表长度="<<length(H)<<endl;
    108 :  
    109 :  
    110 :   cout<<"删除奇数结点:/n";
    111 :   Del(&H);
    112 :   display(H);
    113 : 
    114 :   return 0;
    115 :  }
    116 :  
    117 : 

程序输出如下:

请输入,提示 :回车表示输入完毕!
1
2
3
4
5
6
7
8
9
11
0
单链表显示:
11→9→8→7→6→5→4→3→2→1

单链表长度=10
删除奇数结点:
单链表显示:
8→6→4→2→0
Press any key to continue

 

 

 


10月7日晚间消息,据国外媒体报道,德国一名54岁的数学家带领他的团队,在慕尼黑大学旁一间小小的办公室内开发出了一种新型互联网广告技术,有望淘汰Google和雅虎等公司现有广告技术。业内人士将其称之为硅谷CEO们的“噩梦”。

  这名54岁老人名叫托马斯-尼歇尔(Thomas Nitsche),是德国一家名为Proximic的公司的CTO,尼歇尔所开发出的这项技术将相关广告与网页进行匹配,也就是目前Google AdSense网络所实现的功能。但是尼歇尔和他的合作者,34岁的Proximic公司CEO菲利普-派巴(Philipp Pieper)相信,他们的技术将优于Google。接触过这项技术的人也表示,尼歇尔的技术看上去更加出色。

  Google关注于一个网页的字词,而Proximic却是查找字符串的匹配。这将意味着Proximic的方式完全独立于语言,因为虽然它采用英语实现,但是却能够很好地处理德语和中文页面。

  从理论上来说,Proximic的创意将使博客和社会化网络等站点中用户创建的内容出现随机喷涌,从而从根本上超越Google的算法。

  IDC分析师苏-菲尔德曼说,“如果他们能够实现,这的确是一项突破。”

  一名近期密切关注Proximic的技术的互联网老兵认为,它完全拥有改变游戏规则的潜力,但是尼歇尔和派巴面临证明自身远优于现有方式的挑战。

  目前,Proximic在其网站上发布了一款Firefox插件,以向外界展示它的技术。这款插件在用户浏览网页时在创建一个侧边栏,在侧边栏中显示匹配网页内容的文章或其他信息。英国《独立日报》和《Nature》出版集团如今正在采用这项技术。

  据称,在其第一轮融资中,Proximic已经从风险公司Wellington Partners和霍尔茨布林克集团获得450万美元风险投资。

  一名Google发言人表示,Google正不断升级自身的目标和上下文匹配技术,从而可以在正确的时间向正确的人展示正确的广告。

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

实验二 删除奇数结点的链表-----程序实现

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭