| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 873 人关注过本帖
标题:请教一个c语言的数据结构与算法的单链表中的删除问题
只看楼主 加入收藏
hehewei
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2009-12-24
结帖率:90%
收藏
已结贴  问题点数:40 回复次数:7 
请教一个c语言的数据结构与算法的单链表中的删除问题

#include <stdio.h>
#include <stdlib.h>

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

typedef struct Node pNode;
typedef struct Node *LinkList;

void delete_node(struct Node * h,int x);


void main(void)
{

//    LinkList p;

    pNode a,b,c;
    a.data = 1; a.next = &b;
    b.data = 2; b.next = &c;
    c.data = 3; c.next = NULL;
   
    delete_node(&a, 2);
   
   
/*    p = &a;

    while(p)
    {
       printf("%d ",p->data);
      
    }*/
}

void delete_node(struct Node * h,int x)

{
    struct Node *p,*q;
    q=h;p=h->next;

    if(p!=NULL)
    {
        while ((p!=NULL)&&(p->data!=x))
        {
            q=p;p=p->next;
        }
        if(p->data =x)
        {
            q->next=p->next;free(p);
        }
    }
}

运行没错,但是没结果!!!
搜索更多相关主题的帖子: 数据结构 c语言 单链 算法 
2010-11-05 10:17
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:15 
#include <stdio.h>
#include <stdlib.h>

typedef struct Node
{
     int data;
     struct Node * next;
}pNode, *LinkList;

void delete_node(struct Node * h,int x);


void main(void)
{

//    LinkList p;

    pNode a,b,c;
    a.data = 1; a.next = &b;
    b.data = 2; b.next = &c;
    c.data = 3; c.next = NULL;
   
    delete_node(&a, 2);
   
   
    LinkList p = &a;

    while(p)
    {
       printf("%d ",p->data);
       p = p->next;   
    }
}

void delete_node(struct Node * h,int x)

{
    struct Node *p,*q;
    q=h;p=h->next;

    if(p!=NULL)
    {
        while ((p!=NULL)&&(p->data!=x))
        {
            q=p;p=p->next;
        }
        if(p->data =x)
        {
            q->next=p->next;//free(p);
        }
    }
}
这种改动方式 只是 显示结果 并没有解决 什么实际的问题  
自己画画写写
2010-11-05 14:40
浩凡儿
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:101
专家分:394
注 册:2010-10-30
收藏
得分:15 
#include<stdio.h>
#include<string.h>
#include<malloc.h>
 typedef struct
 {
 char name[20];
 char key[15];
 char Class[10];
 int age;

 }DATA;
 typedef struct node
 {
 
 DATA data;
 struct node *next;
 }ChainListType;

 ChainListType *ChainListAddFirst(ChainListType *head,DATA data)
 {
 ChainListType *node;
if(!(node=(ChainListType *)malloc(sizeof(ChainListType))))
{
printf("为保存数据申请内存失败! \n");
return NULL;
}
node->data=data;
node->next=head;
head=node;
return head;
 }

 ChainListType *ChainListFind(ChainListType *head,char *findkey)
 {
 ChainListType *h;
 h=head;
 while(h)
 {
 if(strcmp(h->data.name,findkey)==0)
     return h;
 h=h->next;
 }
 return NULL;
 }


 int ChainListDelete(ChainListType *head,char *key)
 {
   ChainListType *node,*h;
   node=h=head;
   while(h)
   {
       if(strcmp(h->data.name,key)==0)
       {
       node->next=h->next;
       free(h);
      return 1;
       }else {
       node=h;
       h=h->next;
       }
   }
 return 0;
 }

 //显示所有学生信息。
  void ChainListAll(ChainListType *head)
  {
      int i=1;
  ChainListType *h=head;
  DATA data;
  while(h)
  {
  data=h->data;
  printf("第%d个同学的信息为:姓名:%s学号:%s班级:%s年龄:%d\n",i++,data.name,data.key,data.Class,data.age);
  h=h->next;
  }

  }
 

  //添加学生的信息.
   
   ChainListType *Input(ChainListType *head)
   {
       DATA data ;
   printf ("请输入添加学生的信息:");
   printf("请输入姓名:\t");
   scanf("%s",data.name);
   printf("请输入学号: \t");
   scanf("%S",data.key);
   printf("请输入班级: \t");
   scanf("%S",data.Class);
   printf("请输入年龄:\t");
   scanf("%d",&data.age);
   
   return ChainListAddFirst(head,data);
   }


   //查找学生的信息.
     
    void Find(ChainListType *head)
    {
    DATA data;
    char name[20];
    ChainListType *h;
    printf("请输入要查找的学生的姓名:\n");
        scanf("%s",name);
         h=ChainListFind(head,name) ;
             if(h)
             {
             data=h->data;
             printf("要查找的学生的信息为:姓名:%s\t学号:%s\t班级:%s\t年龄:%d\t",data.name,data.key,data.Class,data.age);
             }
    }

    //删除学生信息。


    void Delete(ChainListType *head)
    {
    ChainListType *h=head;
    char name[20];
    printf("请输入要删除的学生的姓名:\n");
    scanf("%s",name);
    ChainListDelete(head,name);

   
    }

    int main()
    {
     ChainListType *head=NULL;
     char select;
     do
     {
     printf("\n*******************************\n");
     printf("a.添加学生的信息。\n") ;
     printf("b.显示学生的所有信息。\n");
     printf("c.查找学生的信息。\n");
     printf("d.删除学生的信息。\n");
     printf("*********************************\n");

     select=getchar();
     switch(select)
     {
     case'a':
              head=Input(head);
         break;
     case'b':
              ChainListAll(head);
         break;
     case'c':
         Find(head);
         break;
     case'd':
              Delete(head);
         break;
     case'e':
              break;
     
     }
     
     }while (select!='e');
     return 0;
    }这是俺做的个简单的学生管理系统可看下上边有关ChainListType的添加与删除功能函数可参考下
2010-11-08 23:22
wsliuyunming
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:54
专家分:143
注 册:2010-9-26
收藏
得分:10 
free()是用来释放 malloc 申请的空间的 你的程序里面没有用到malloc申请空间所以 用free会出错。。。
2010-11-09 10:01
hehewei
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2009-12-24
收藏
得分:0 
谢谢各位指导!!!有点头绪了!!!
2010-11-10 21:44
hehewei
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2009-12-24
收藏
得分:0 
貌似这种东西理解容易,但做起来有点难啊!!!
2010-11-10 22:17
烧包谷
Rank: 2
等 级:论坛游民
威 望:2
帖 子:60
专家分:69
注 册:2010-10-11
收藏
得分:0 
回复 6楼 hehewei
俺老师说,笔试满分也未必能真正写好一个程序,他对我们的要求是尽量上机!
2010-11-11 19:02
promise90
Rank: 1
来 自:芜湖
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-10-9
收藏
得分:0 
“free()是用来释放 malloc 申请的空间的 你的程序里面没有用到malloc申请空间所以 用free会出错。。。 ”这个我很赞同。
2010-11-12 10:47
快速回复:请教一个c语言的数据结构与算法的单链表中的删除问题
数据加载中...
 
   



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

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