输入的时候没事,但是删除说找不到数.输出也有错误..
(我自己又改了下,好了点.只是输出有有问题,中间有些的没有输出.)
#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编辑过]