| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 369 人关注过本帖
标题:[求助]链表错哪里了啊?
只看楼主 加入收藏
起点线
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2006-12-7
收藏
 问题点数:0 回复次数:1 
[求助]链表错哪里了啊?

输入的时候没事,但是删除说找不到数.输出也有错误..

(我自己又改了下,好了点.只是输出有有问题,中间有些的没有输出.)

#include <stdio.h>
#include <stdlib.h>
#define NULL 0
#define S struct student
#define LEN sizeof(S)
S
{
int num;
char name[10];
int score;
S *next;
};

/******输入******/

S *input(void)
{
S *p,*q,*head;
p=q=head=(S*)malloc(LEN); /*分配空间*/
scanf("%d",&p->num);
getchar();
scanf("%s",p->name);
getchar();
scanf("%d",&p->score);
while(1)
{
p=(S*)malloc(LEN);
scanf("%d",&p->num);
if(p->num==0) break;
getchar();
scanf("%s",p->name);
getchar();
scanf("%d",&p->score);
q->next=p;
q=p; /*连接*/
}
q->next=NULL;
p=head;
return head;
}

/******删除******/

S *delete(S *head,int n)
{
S *p,*q;
p=q=head;
while(n!=p->num&&p->next!=NULL) /*查找位置*/
{ q=p; p=p->next; }
free(p); /*删除*/
if(n==p->num)
{
if(p==head) head=p->next; /*头结点重新赋值 */
else q->next=p->next; /*中间结点或尾结点*/

}
else printf("not been found\n"); /*没找到*/
return head;
}

/******新增******/

S *add(S *head,S *new)
{
S *p,*q;
p=q=head;
if(head==NULL) head=new; /*新结点为头结点*/
else
if((new->num>p->num)&&(p->next!=NULL)) /*查找位置*/
{ q=p; p=p->next; } /*p下移一位*/
if(new->num<p->num)
{
if(p==head) { head=new; new->next=p; } /*设为头结点*/
else { q->next=new; new->next=p; } /*中间结点*/
}
else
{ p->next=new; new->next=NULL; } /*尾结点*/
return head;
}

/******输出******/

void output(S *p)
{
while(p->num!=0)
{
printf("%d %s %d\n",p->num,p->name,p->score); /*输出值*/
p=p->next; /*p下移一位*/
}
}

/******主函数******/

main()
{
S *head,*new;
int del;
head=input(); /*调用输入*/

printf("input delete: ");
scanf("%d",&del);
head=delete(head,del);

printf("input new: ");
new=(S*)malloc(LEN);
scanf("%d",&new->num);
getchar();
scanf("%s",new->name);
getchar();
scanf("%d",&new->score);
head=add(head,new);

output(head);
}

[此贴子已经被作者于2007-5-16 0:06:09编辑过]

搜索更多相关主题的帖子: include 空间 
2007-05-15 22:38
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

/******删除******/

S *delete(S *head,int n)
{
S *p,*q;
p=q=head;
while(n!=p->num&&p->next!=NULL) /*查找位置*/
{ q=p; p=p->next; }

if(n==p->num)//这个判断不好.假设n不在里面,则p就指向空了.
{
if(p==head) head=p->next; /*头结点重新赋值 */
else q->next=p->next; /*中间结点或尾结点*/
free(p); /*删除 */
}
else printf("not been found\n"); /*没找到*/
return head;
}

scanf("%d",&p->num);//我觉得还是输入的问题.
getchar();
scanf("%s",p->name);//gets(p->name);,不过最好是先设置临时变量,然后再复制给这个字符串
getchar();//这个就不需要了.
scanf("%d",&p->score);


倚天照海花无数,流水高山心自知。
2007-05-15 23:02
快速回复:[求助]链表错哪里了啊?
数据加载中...
 
   



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

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