c语言题型,数据结构题

问题描述某班学生的信息存放在一个线性单链表中,但每学期都有学生因故退学。现要求根据退学学生的学号,将其信息从链表中删除。假设学生的数据只保存姓名、学号、性别,并采用结构体... 问题描述
某班学生的信息存放在一个线性单链表中,但每学期都有学生因故退学。现要求根据退学学生的学号,将其信息从链表中删除。假设学生的数据只保存姓名、学号、性别,并采用结构体类型描述。
输入说明
输入n个学生数据(1<=n<=10)。每行一个学生信息,包括:姓名(不超过20个字符的字符串)、学号(整形)、性别(字符),以空格分隔。学生数据以#结束,并在下一行输入退学学生的学号。
输出说明
若链表中有退学学生,输出删除该学生后的学生数据;如果链表中没有该学生,则输出错误信息No。
展开
 我来答
go学龙
2017-05-11 · TA获得超过484个赞
知道小有建树答主
回答量:520
采纳率:76%
帮助的人:234万
展开全部

#include <stdio.h>

#include <malloc.h>


typedef struct student

{

char name[20];

long num;

char sex;

struct student *pNext;

}Stu, *pStu;


void creatInfo(pStu *stu);

int deletInfo(pStu stu, long numTemp);

void printInfo(pStu stu);


int main(void)

{

long numTemp = 0;

pStu myStu = NULL;

creatInfo(&myStu);


scanf("%ld", &numTemp);

if(1 == deletInfo(myStu, numTemp))

printInfo(myStu);


return 0;

}


void creatInfo(pStu *stu)

{

int n = 1;

pStu pNew = NULL, pTail = NULL;


*stu = (pStu)malloc(sizeof(Stu));


if(*stu == NULL)

return ;

(*stu)->pNext = NULL;

pTail = *stu;


while(n <= 10)

{

pNew = (pStu)malloc(sizeof(Stu));

if(NULL == pNew)

return ;


pNew->pNext = NULL;


scanf("%s", pNew->name);

if('#' == pNew->name[0])

{

free(pNew);

pNew = NULL;

return ;

}


scanf("%ld %c", &pNew->num, &pNew->sex);


pTail->pNext = pNew;

pTail = pNew;


++n;

}


}


int deletInfo(pStu stu, long numTemp)

{

pStu pTail = NULL, pHead = NULL;


pHead = stu;

pTail = stu->pNext;


while(pTail)

{

if(pTail->num == numTemp)

{

pHead->pNext = pTail->pNext;

free(pTail);

pTail = NULL;

return 1;

}


pTail = pTail->pNext;

pHead = pHead->pNext;

}


printf("链表中唔该学生!\n");

return 0;

}


void printInfo(pStu stu)

{

while(stu = stu->pNext)

printf("%s, %d, %c\n", stu->name, stu->num, stu->sex);

}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式