6-1 学生信息链表建立与查找 (15 分)

方法:运用头尾指针高效建立链表

给出一张学生数据表,如下图所示。请采用链式存储结构建立该学生数据表并输出。

6-1 学生信息链表建立与查找 (15 分)_第1张图片

函数接口定义:

struct Student* read_data();            //建立学生信息链表
void output_data(struct Student* head);        //输出学生信息
char* find_data(int no, struct Student* head);    //查找指定学号的学生姓名

 其中 no为学生学号, head为链表的头指针。

裁判测试程序样例:

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
//此单链表建立更加高效与简洁 
//链式存储结构结点类型
struct Student
{
    int no;        //学号
    char name[30];    //姓名
    char gendre[30];    //性别
    char clazz[30];    //班号
    struct Student* next;//指向下一个结点的指针
};

struct Student* read_data();            //建立学生信息链表(核心模块) 
void output_data(struct Student* head);        //输出学生信息
char* find_data(int no, struct Student* head);    //查找指定学号的学生姓名

int main(int argc, char const *argv[])
{
    struct Student* head;
    head = read_data();
    output_data(head);
    int no;
    scanf("%d", &no);
    char* pStr = find_data(no, head);
    puts(pStr);

    return 0;
}
/* 请在这里填写答案 */

输入样例:

1	张斌	男	9901
8	刘丽	女	9902
34	李英	女	9901
20	陈华	男	9902
12	王奇	男	9901
26	董强	男	9902
5	王萍	女	9901
8

注意:此题目中的输入样例复制到编译器会空格丢失,要测试的话需将输入案例手打到编译器里面,这样才可以成功输出!

输出样例:

1	张斌	男	9901
8	刘丽	女	9902
34	李英	女	9901
20	陈华	男	9902
12	王奇	男	9901
26	董强	男	9902
5	王萍	女	9901
刘丽

 

执行代码: 


struct Student* read_data()
{
	struct Student *head,*tail;  //此为运用头指针、尾指针更好的建立链表!!! 
	head = tail = NULL;
	struct Student *p;
    int x=0;
	while(x<7)
	{
		p = (struct Student*)malloc(sizeof(struct Student));
		scanf("%d",&p->no);       //此处输入数字和字符串最好分开写
		scanf("%s%s%s",p->name,p->gendre,p->clazz);
		
		p->next = NULL;
		
		if(head == NULL)
			head = p;
		else 
			tail->next = p;
			
		tail = p;
        x++;
	}
	return head;
}

void output_data(struct Student* head)    //不定义结构体指针p也是ok的
{
	struct Student *p;
	for(p = head;p != NULL;p = p->next)
		printf("%d\t%s\t%s\t%s\n",p->no,p->name,p->gendre,p->clazz);

}

char* find_data(int no, struct Student* head)   //查找模块,返回类型需注意 
{
	struct Student* p = head;
	while(p!=NULL)
	{
		if(p->no == no) 
			return p->name;   //返回值为字符串的首地址
			
		p = p->next;
	 } 
	 return NULL;
}

与一般的链表建立方法相比,此方法在连续输入时更具有优势,不过做不到头插法与尾插法!!!

你可能感兴趣的:(链表,c语言,链表,数据结构)