头文件代码
#ifndef __SSYSTEM_H__
#define __SSYSTEM_H__
typedef struct
{
float score;
char name[20];
int id;
}datatype;
typedef struct Node
{
union{
datatype data;
int len;
};
struct Node* next;
}Student;
//申请节点
Student *node_buy(datatype e);
//判空
int list_empty(Student *S);
//信息输入
datatype info_add();
//创建
Student *create();
//遍历
void list_show(Student *S);
//尾插
int list_insrt_tail(Student *S,datatype e);
//按位置查找返回查找节点
Student *find_node(Student *S,int pos);
//按学号查找返回查找节点的前驱节点
Student *find_node_id(Student *S,int old_id);
//按姓名查找返回查找节点的前驱节点
Student *find_node_name(Student *S,char old_name[])
//头删
int list_delete_head(Student *S);
//任意位置删
int list_delete_pos(Student *S,int pos);
//任意学号删
int list_delete_id(Student *S,int old_id);
//任意姓名删
int list_delete_name(Student *S,char old_name[]);
//按学号查找返回信息
int list_search_value_id(Student *S,int e);
//按成绩查找返回信息
int list_search_value_score(Student *S,int e);
//按姓名查找返回信息
int list_search_value_name(Student *S,char e[]);
//位置修改
int list_update_pos(Student *S,int pos,datatype new_e);
//按学号修改
int list_update_value_id(Student *S,int old_id,datatype new_e);
//按姓名修改
int list_update_name(Student *S,char old_name[],datatype new_e);
//销毁
void list_delete_all(Student *S);
#endif
被调函数
#include<stdio.h>
#include<stdlib.h>
#include"ssystem"
#include<string.h>
Student *node_buy(datatype e)
{
Student *p = (Student *)malloc(sizeof(Student));
if(NULL == p)
{
printf("节点申请失败\n");
return NULL;
}
p->data = e;
p->next = NULL;
return p;
}
//判空
int list_empty(Student *S)
{
//1表示空 0表示非空
return NULL == S->next ? 1:0;
}
//信息输入
datatype info_add()
{
datatype val;
printf("请输入姓名:\n");
scanf("%s",val.name);
printf("请输入学号:\n");
scanf("%d",&val.id);
printf("请输入分数:\n");
scanf("%f",&val.score);
return val;
}
Student *create()
{
//申请结点
Student *p=(Student *)malloc(sizeof(Student));
if(NULL==p)
{
printf("创建失败\n");
return NULL;
}
//初始化
p->len=0;
p->next=NULL;
printf("创建成功\n");
return p;
}
void list_show(Student *S)
{
if(NULL==S || list_empty(S))
{
printf("表空,遍历失败\n");
return;
}
printf("链表元素分别是:\n");
Student *q = S->next;
while(q != NULL)
{
printf("%s\t%d\t%.2f\n",q->data.name,q->data.id,q->data.score);
q = q->next;
}
}
int list_intsrt_tail(Student *S,datatype e)
{
//判断逻辑
if(NULL==S)
{
printf("所给的链表不合法\n");
return -1;
}
//调用结点申请函数申请一个子结点
Student *p = node_buy(e);
//定义遍历指针定位到链表尾部
Studen