我是靠谱客的博主 贪玩鸵鸟,最近开发中收集的这篇文章主要介绍统计相同姓名的学生个数(链表建立,逆置,遍历,释放),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

#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;
}

最后

以上就是贪玩鸵鸟为你收集整理的统计相同姓名的学生个数(链表建立,逆置,遍历,释放)的全部内容,希望文章能够帮你解决统计相同姓名的学生个数(链表建立,逆置,遍历,释放)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部