一、学生管理系统算法分析
1.插入学生信息(需要具备数据结构基础)
建立头结点、建立新结点函数、建立新结点并插入数据
void InsertStudent() {//插入函数
int x;
struct Student S;
printf("请输入学生的数目:");
scanf("%d", &x);
for (int i = 1; i <= x; i++) {
printf("请分别输入第%d个同学姓名:\n",i);
scanf("%s", &S.name);
printf("请分别输入第%d个同学年龄:\n",i);
scanf("%d", &S.age);
printf("请分别输入第%d个同学电话:\n",i);
scanf("%s", &S.tel);
printf("请分别输入第%d个同学住址:\n",i);
scanf("%s", &S.addr);
CreatNodeList(StudentNode, S);
}
}
struct Node* CreatNode() //建立头节点
{
struct Node* HeadNode = (struct Node*)malloc(sizeof(struct Node));
HeadNode->Next = NULL;
return HeadNode;
}
struct Node* CreatNewNode(struct Student data)
{//建立新结点函数
struct Node* NewNode = (struct Node*)malloc(sizeof(struct Node));
NewNode->data = data;
NewNode->Next = NULL;
return NewNode;
}
void CreatNodeList(struct Node* HeadNode, struct Student data)
{//建立新节点并插入数据
struct Node* NewNode = CreatNewNode(data);
NewNode->Next = HeadNode->Next;
HeadNode->Next = NewNode;
}
2.删除学生信息
删除结点
void deletestudent() {//删除节点|
char name[10];
printf("请输入需要删除的学生名字:\n");
scanf("%s", &name);
deletenode(StudentNode, name);
}
void deletenode(struct Node* headnode, char* name)
{//删除节点操作
struct Node* posnode = headnode->Next;
struct Node* posnodefront = headnode;
if (posnode == NULL) {
printf("数据为空,无法删除");
}
else
{
while (strcmp(posnode->data.name, name))
{
posnodefront = posnode;
posnode = posnodefront->Next;
if (posnode == NULL) { printf("未找到指定位置,无法删除"); return; }
}
posnodefront->Next = posnode->Next;
free(posnode);
}
}
3.查找学生信息
查找结点、打印单个结点、浏览信息
struct Node* SearchNode(struct Node* StudentNode, char* name) {
//查找节点
struct Node* pMove = StudentNode->Next;
if (pMove == NULL) {
printf("未找到该学生");
return(pMove);
}
else
{
while (strcmp(pMove->data.name, name))
{
pMove = pMove->Next;
if (pMove == NULL)break;
}
return pMove;
}
}
void PrintList(struct Node* StudentNode)
{//打印单个节点
printf("姓名\t年龄\t电话\t\t住址\n");
printf("%s\t%d\t%s\t%s\n", StudentNode->data.name, StudentNode->data.age, StudentNode->data.tel, StudentNode->data.addr);
}
void PrintNode(struct Node* StudentNode)
{//浏览信息
struct Node* pow = StudentNode->Next;
printf("姓名\t年龄\t电话\t\t住址\