数据结构:下列程序为什么只运行了一半,求高手解答

#include<stdio.h>
#include<stdlib.h>
/*结构体声明*/
struct node
{
char no[7]; //学生学号
int sub[3]; //每门成绩
struct node*next; //指向下一结点的指针
};
typedef struct node NODE; //以新类型名代替变量名
/*函数声明*/
NODE *insert(NODE *p);
NODE *makelist(int n);
int delnode(NODE *p);
int output(NODE *head);
/*主函数*/
int main()
{
int n,t,i=1; //n:这个链表拥有n个结点,t:一共有t名学生,i:循环变量
NODE *head,*p; //head:头指针,p:插入点
printf("请输入学生人数:");
scanf("%d",&n); //输入n的值
head=makelist(n); //创建一个有n+1个结点的链表,头结点之后有n个结点,并将头指针赋给head
t=output(head); //输出学生信息,并将学生人数赋给t
printf("一共有%d名学生。\n",t);
p=head; //将头指针赋给p
/*寻找插入点p*/
while(p&&i<n-1)
{
p=p->next;
++i;
}
delnode(p); //删除p之后的结点
t=output(head); //输出学生信息,并将学生人数赋给t
printf("一共有%d名学生。\n",t);
insert(head); //在头结点之后插入一个结点
t=output(head); //输出学生信息,并将学生人数赋给t
printf("一共有%d名学生。\n",t);
return 0;
}
/*建立链表*/
NODE *makelist(int n) //建立一个有n+1个结点的链表
{
NODE *head,*p1,*p2; //head:链表的头指针,p1:跳动的循环指针,p2:每个结点的指针
int i,j; //循环变量
head=NULL; //将空指针赋予头指针
for(i=1;i<n+1;++i)
{
p1=(NODE *)malloc(sizeof(NODE)); //为p1申请存储空间
if(p1!=NULL) //申请成功
{
gets(p1->no);
for(j=0;j<3;j++)
scanf("%d",&(p1->sub[j])); //为数据区赋值
if(head==NULL)
{
head=p1; //头指针就是p1
p2=p1; //第一个结点的指针就是p1
}
else //建立后面的链表
{
p2->next=p1; //p2的下一个结点就是p1
p2=p1; //p2成了下一个节点的指针
}
}
else {head=NULL;break;} //申请失败,跳出循环
}
return head; //返回申请列表的头指针
}
/*插入结点*/
NODE *insert(NODE *p) //在p的后面插入一个结点
{ int i; //循环变量
NODE *q; //要插入的结点的指针
q=(NODE *)malloc(sizeof(NODE)); //为q申请存储空间
if(q!=NULL) //申请成功
{
gets(q->no);
for(i=0;i<3;i++)
scanf("%d",&(q->sub[i])); //为数据区赋值
q->next=p->next;
p->next=q; //插入结点
}
return q; //返回插入结点的指针
}
/*删除结点*/
int delnode(NODE *p) //删除p所指结点之后的结点
{
if(p==NULL||p->next==NULL) //p是空指针或p之后无结点,删除失败
return 0;
else
{
NODE *r; //定义一个临时指针
r=p->next;
p->next=r->next; //删除结点
free(r); //释放r
return 1;
}
}
/*遍历链表*/
int output(NODE *head) //输出链表数据,并统计结点个数
{
int i=0,j; NODE *p=head;
while(p)
{
printf("%s\n",p->no);
for(j=0;j<3;j++)
printf("%d\t",p->sub[j]); //输出链表数据
puts("\n");
p=p->next;
i++; //累计结点个数
}
return i; //返回结点个数
}

scanf输入有问题,
printf("请输入学生人数:");
scanf("%d",&n); //输入n的值//这里的输入是包涵回车的,要用个getchar吞掉
getchar();
。。。
gets(p1->no);
for(j=0;j<3;j++)
scanf("%d",&(p1->sub[j])); //为数据区赋值
getchar();//类似的问题
。。。
p1->next = NULL;//把你那链表的尾巴设为空!
return head; //返回申请列表的头指针
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-09
中间错了。。。追问

哪里?

追答

#include

#include
/*结构体声明*/
struct node
{
char no[7]; //学生学号
int sub[3]; //每门成绩
struct node*next; //指向下一结点的指针
};
typedef struct node NODE; //以新类型名代替变量名
/*函数声明*/
NODE *insert(NODE *p);
NODE *makelist(int n);
int delnode(NODE *p);
int output(NODE *head);
/*主函数*/
int main()
{
int n,t,i=1; //n:这个链表拥有n个结点,t:一共有t名学生,i:循环变量
NODE *head,*p; //head:头指针,p:插入点
printf("请输入学生人数:");
scanf("%d",&n); //输入n的值
head=makelist(n); //创建一个有n+1个结点的链表,头结点之后有n个结点,并将头指针赋给head
t=output(head); //输出学生信息,并将学生人数赋给t
printf("一共有%d名学生。\n",t);
p=head; //将头指针赋给p
/*寻找插入点p*/
while(p&&inext;
++i;
}
delnode(p); //删除p之后的结点
t=output(head); //输出学生信息,并将学生人数赋给t
printf("一共有%d名学生。\n",t);
insert(head); //在头结点之后插入一个结点
t=output(head); //输出学生信息,并将学生人数赋给t
printf("一共有%d名学生。\n",t);
return 0;
}
/*建立链表*/
NODE *makelist(int n) //建立一个有n+1个结点的链表
{
NODE *head,*p1,*p2; //head:链表的头指针,p1:跳动的循环指针,p2:每个结点的指针
int i,j; //循环变量
head=NULL; //将空指针赋予头指针
for(i=1;i<n+1;++i)

应该吧,我也不是专业的。。。你可以去看一下《数据结构(C语言版)》,这书不错

数据结构:下列程序为什么只运行了一半,求高手解答
scanf输入有问题,printf("请输入学生人数:");scanf("%d",&n); \/\/输入n的值\/\/这里的输入是包涵回车的,要用个getchar吞掉 getchar();。。。gets(p1->no);for(j=0;j<3;j++)scanf("%d",&(p1->sub[j])); \/\/为数据区赋值 getchar();\/\/类似的问题 。。。p1->next = NULL;\/\/...

求下列程序段的 时间复杂度,最好有解题过程
可知若i=w,则程序段执行次数为1+2+..+w。因此定义f(i)=1+2+..+i 那么总的执行次数为 f(1)+f(2)+..+f(n)=1*n+2*(n-1)+3*(n-2)+..+(n-1)*2+n=n^2*(1+n)\/2-1*2-2*3-3*4-...-(n-1)*n 不好意思水平有限,只能到这步了,应该是小于n^3的.2.我们可以...

我遇到一些数据结构的问题,请高手帮忙给解答,跪谢!!!
1, t->next = p->next 2, p=head 3, n-k 4,1

下面这个程序的运行结果为什么是9,求高手解答
此时K=3,++k即为4 ,即4+1*4+1=>9

求数据结构高手解答~~~!谢谢啦~
4.C. 35421 栈按后进先出 123入栈,3出栈,45入栈,5出栈,4出栈,2出栈,1出栈 7.D.(r-f+n)%n 循环队列,r可以在f之前

为什么下面这个程序能执行但结果却不正确 求高手指点迷津!!!
f v(height,width);这句话放到 cout<<"请输入长和宽:"<<endl;cin>>height;cin>>width;的后面

批处理问题,下面的代码不知道为什么运行一次就不运行了,求高手解答
这代码不合用是肯定的---弄来弄去只是判断了wz.txt文档第一行第79~82个字符是否和今天日期月日相同,调用那个生日提醒.bat也不会因不同的行有什么不同,还不停循环 在线的话说说想怎么用帮你重写一个

C语言求高手解答为什么运行不了程序
多重定义被发现,你把同一个变量可能定义了俩次

谁懂下面这段关于PID的程序?求高手解答
程序执行效果: 输出 = 2 * 输入 +10 这应该是一段经验程序,是试验出来的控制参数计算方法,应该不算真正的PID调节,因为它只利用了当前输入状态,而没有考虑输入参数的积分效应 (I) 和微分效应(D),最多只有P调节,同时考虑了静差量 (10)。据本人估计,作者应该原本是想写 PID 方式调节程序...

求高手解答程序运行的顺序 while(dht11 != 0 && count++ < NUMBER...
dht11 != 0和 count++ < NUMBER 要同时满足 才可以

相似回答
大家正在搜