概述
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student
{
int sno;
char name[20];
char gender;
int age;
student* next;
};
student creatalist(student*phead,int n); //创建链表
student change(student* phead); //链表逆置
void numberOfquery(student*,char*); //查找重名学生
void traverseList(student* phead); //遍历链表
int main() //主函数
{
student * phead=NULL;
phead=(student*)malloc(sizeof(student));
student * pnew;
int n;
printf("学生人数:");
scanf("%d",&n);
creatalist(phead,n);
change(phead);
char sname[20];
printf("n待查的学生姓名:");
fflush(stdin);
gets(sname);
numberOfquery(phead,sname);
traverseList(phead);
phead=NULL;
free(phead);//释放
return 0;
}
student creatalist(student*phead,int n)
{
student* pnew;
phead->next =NULL;
for(int i=0;i<n;i++)
{
pnew=(student*)malloc(sizeof(student));
printf("n学号:");
scanf("%d",&(pnew->sno));
printf("姓名:");
fflush(stdin);
gets(pnew->name);
printf("性别:");
pnew->gender=getchar();
printf("年龄:");
scanf("%d",&(pnew->age));
pnew->next=NULL;
pnew->next=phead->next;
phead->next=pnew;
}
return *phead;
}
student change(student* phead)//逆置算法
{
student *pnew,*pwork;
pnew = phead->next;
phead->next = NULL;
while(pnew != NULL)
{
pwork=pnew;
pnew = pnew->next;
pwork->next = phead->next;
phead->next = pwork;
}
return *phead;
}
void traverseList(student* phead )//遍历
{
int i = 0;
student* p = NULL;
p = phead->next ;
printf("n 学号 姓名 性别 年龄 n");
if(NULL == p)
{
printf("链表为空!n");
}
else
{
while(p)
{
printf("n第%d个学生 ",i+1);
printf(" %d %s %c %d",p->sno ,p->name ,p->gender ,p->age );
p = p->next;
i++;
}
}
return;
}
void numberOfquery(student* phead,char* sname)
{
int sum=0;
student* p=phead;
while(p->next!=NULL)
{
p=p->next;
if(strcmp(p->name,sname)==0) sum=sum+1;
}
printf("n叫%s名字的人有%d位",sname,sum);
return;
}
最后
以上就是贪玩鸵鸟为你收集整理的统计相同姓名的学生个数(链表建立,逆置,遍历,释放)的全部内容,希望文章能够帮你解决统计相同姓名的学生个数(链表建立,逆置,遍历,释放)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复