| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 878 人关注过本帖
标题:请高手指点:以字符串为数据的单链表操作
只看楼主 加入收藏
kissjerry
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-2-25
结帖率:0
收藏
已结贴  问题点数:20 回复次数:9 
请高手指点:以字符串为数据的单链表操作
#include <stdio.h>
#include <string.h>
#define null 0
typedef struct node{
 char *data;
 struct node *next;
 }linkstrnode;
typedef linkstrnode *linkstring;

main()
 {
 linkstring head;
 char *t;

 printf("\n please input the node of the linklist : ");
 printf("\n nodes data is string , and end of # \n");
 creatlinkstr(&head);
 printf("\n the source linklist is : \n");
 printing(head);
 printf("\n please input search string : ");
 gets(t);
 deletet(&head,t);
 printf("\n the final linklist is : \n");
 printing(head);
 }

creatlinkstr(linkstring head){
 char *t;
 linkstrnode *p;
 head=(linkstrnode *)malloc(sizeof(linkstrnode));
 head->next=null;
 printf("\n please input the node data(string),end of #");
 gets(t);
 while (strcmp(t,"#")!=0){
  p=head;
  while ((p->next)&&(strcmp(t,p->next->data))) p=p->next;
  if (p->next)
   printf("\n string %s existed",t);
   else {
    p->next=(linkstrnode *)malloc(sizeof(linkstrnode));
    p=p->next;
    strcay(p->data,t);
    p->next=null;
    }
    printf("\n please input the node data(string),end of # ");
    gets(t);
    }
    }

printing(linkstring head){
 linkstrnode *p;
 p=head->next;
 while(p){
  puts(p->data);
  p=p->next;
  }
  }
deletet(linkstring head,char *t){
 linkstrnode *p,*s;
 p=head;
 while ((p->next)&&(strcmp(p->next->data,t)))
 p=p->next;
 if (p->next){
  s=p->next;
  p->next=s->next;
  free(s);
  printf("\n delete successful!");
  }
 else printf("\n deletet failure!");
 }

本程序编译可以通过,但在gets(t)一直会有警告?
 
请高手指点迷津,跪谢!!!
搜索更多相关主题的帖子: 数据 字符 单链 
2010-02-25 20:34
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:5 
DEV下编译不过,strcay是什么东西?(我是新手)
2010-02-25 21:02
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:5 
就是这个函数不建议使用了,只要用就会给警告。如果要求不高的话,无视这个警告就可以了。(你的警告内容是不是说这个函数有危险,不让用呀?)
2010-02-25 21:03
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
回复 2楼 heartnheart
没有 strcay 吧,可能是 strcat 的手误我想。
2010-02-25 21:04
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:0 
creatlinkstr(linkstring head){
char *t;
linkstrnode *p;
head=(linkstrnode *)malloc(sizeof(linkstrnode));
head->next=null;
printf("\n please input the node data(string),end of #");
gets(t);
while (strcmp(t,"#")!=0){
  p=head;
  while ((p->next)&&(strcmp(t,p->next->data))) p=p->next;
  if (p->next)
   printf("\n string %s existed",t);
   else {
    p->next=(linkstrnode *)malloc(sizeof(linkstrnode));
    p=p->next;
    strcay(p->data,t);
    p->next=null;
    }
    printf("\n please input the node data(string),end of # ");
    gets(t);
    }
    }
改过之后DEV编译通过,但会发生运行时异常……
2010-02-25 21:11
kissjerry
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-2-25
收藏
得分:0 
对不起,我在线等

我更正下



strcpy
2010-02-25 21:14
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
警告的内容是什么呀?运行的时候有没有出什么问题?你都相应的描述一下。
2010-02-25 21:27
kissjerry
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-2-25
收藏
得分:0 
warning:Possible use of 't' before definition in function main

可以运行,但是字符串无法打印出来
2010-02-25 21:33
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:5 
你的程序在vc中是不能通过编译的。
另外,
1)注意到你的结点定义中char *data;只是定义放串指针,这样对于变量t,应该为它申请空间存放真正的数据--字符串。
2)strcay(p->data,t);应该是strcpy(p->data,t);吧。如果是strcpy(p->data,t);也应该为p->data申请空间。

[ 本帖最后由 ying8501 于 2010-2-25 21:44 编辑 ]
2010-02-25 21:35
深蓝浅蓝
Rank: 1
等 级:新手上路
帖 子:1
专家分:5
注 册:2010-2-25
收藏
得分:5 
对,gets();函数如果想得到字符串必须先开辟空! 如果不开辟空间的话,编译可以通过,但是不能执行!!
如下 简单一用gets();
# include <stdio.h>
# include <string.h>
# include <malloc.h>
void main ()
{
    char *p;
    printf ("please input the string :\n");
    p=(char*)malloc(20*sizeof (char));
    gets(p);
    printf ("%s\n",p);
}
你可以试试,这样就可以了!!!
2010-02-25 22:09
快速回复:请高手指点:以字符串为数据的单链表操作
数据加载中...
 
   



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

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