采用单向链表建立一个学生信息表,每个节点包括学号(int型),姓名(字符型20位),成绩(int型),并输出。
3个回答
展开全部
student.h 文件代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student
{
char name[20];
int age;
int num;
};
//单链表的结构体
typedef struct SingleList
{
struct student mystudent;
//指针域
struct SingleList *next;
}LIST, *LPLIST;
/*
别名:习惯大写
起别名---小名
//好处:单词少,好看(含义更精简)
struct SingleList 换一种叫法: LIST;
strcut SingleList * 换一种叫法: LPLIST
*/
//------->2.创建链表 ---任何结构都需要用一个东西去表示
LPLIST CreateList()
{
//创建过程就是初始化过程---初始化基本数据成员过程
//需要内存空间
LPLIST List = (LPLIST)malloc(sizeof(LIST));
if (List == nullptr)
{
printf("失败了\n");
system("pause");
exit(0);
}
//初始化基本数据成员----有表头的链表
List->next = nullptr;
return List;
}
//------->3.创建结点
LPLIST CreateNode(struct student mystudent)
{
//1.需要内存
LPLIST Node = (LPLIST)malloc(sizeof(LIST));
//2.初始化基本数据成员
strcpy(Node->mystudent.name, mystudent.name);
Node->mystudent.age = mystudent.age;
Node->mystudent.num = mystudent.num;
Node->next = nullptr;
return Node;
}
//------->4.2 尾插法
void InsertListTailNode(LPLIST List, struct student mystudent)
{
//找到表尾--->定义一个移动的指针
LPLIST tailNode = List;
while (tailNode->next != nullptr)
{
tailNode = tailNode->next;
}
//创建插入的结点
LPLIST newNode = CreateNode(mystudent);
tailNode->next = newNode;
}
//------->5.判断是否为空
//和创建的时候比较
int IsEmptyList(LPLIST List)
{
if (List->next == nullptr)
return 1; //返回1表示为空
return 0; //表示不为空
}
////------->6.打印数据
void PrintList(LPLIST List)
{
if (IsEmptyList(List))
{
printf("链表为空,无法打印");
system("pause");
exit(0);
}
LPLIST pNext = List->next;
while (pNext != nullptr)
{
printf("姓名:%s\t年龄:%d\t编号:%d\n", pNext->mystudent.name, pNext->mystudent.age, pNext->mystudent.num);
pNext = pNext->next;
}
}
//------->9.按照编号指定位置删除
void DeleteListAppoinNode_num(LPLIST List, int num)
{
//创建两个移动的指针:去找指定位置和指定位置的前面
LPLIST frontNode = List;
//frontNode->next==taiNode:判断相邻
LPLIST tailNode = List->next;
//判断是否为空
while (tailNode->mystudent.num != num)
{
/*
frontNode=frontNode->next;
tailNode=tailNode->next;
*/
frontNode = tailNode;
tailNode = frontNode->next;
if (tailNode == nullptr)
{
printf("未找到指定位置\n");
system("pause");
exit(0);
}
}
frontNode->next = tailNode->next;
free(tailNode);
}
//------->9.按照姓名指定位置删除
void DeleteListAppoinNode_name(LPLIST List, char *name)
{
//创建两个移动的指针:去找指定位置和指定位置的前面
LPLIST frontNode = List;
//frontNode->next==taiNode:判断相邻
LPLIST tailNode = List->next;
//判断是否为空
while (strcmp(tailNode->mystudent.name, name))
{
/*
frontNode=frontNode->next;
tailNode=tailNode->next;
*/
frontNode = tailNode;
tailNode = frontNode->next;
if (tailNode == nullptr)
{
printf("未找到指定位置\n");
system("pause");
exit(0);
}
}
frontNode->next = tailNode->next;
free(tailNode);
}
void Menu()
{
printf("\t\t\t1.录入信息\n");
printf("\t\t\t2.删除信息\n");
printf("\t\t\t3.浏览信息\n");
}
LPLIST List = CreateList(); //List创建成功
void key_down()
{
char name[20] = "";
int num = 0;
fflush(stdin);
char choice = getchar();
int DChoice = 1;
switch (choice)
{
case '1':
system("cls");
struct student mystudent;
printf("请输入:\t姓名:\t年龄:\t编号:\n");
scanf("%s%d%d", mystudent.name, &mystudent.age, &mystudent.num);
InsertListTailNode(List, mystudent);
break;
case '2':
system("cls");
fflush(stdin);
printf("\t\t\t1.按照姓名删除\n");
printf("\t\t\t2.按照编号\n");
DChoice = getchar();
switch (DChoice)
{
case '1':
printf("请输入要删除的姓名:\n");
scanf("%s", name);
DeleteListAppoinNode_name(List, name);
break;
case '2':
printf("请输入要删除的编号:\n");
scanf("%s", name);
DeleteListAppoinNode_num(List, num);
}
break;
case '3':
system("cls");
printf("学生信息:\n");
PrintList(List);
break;
default:
printf("输入错误\n");
system("pause");
}
}
student.cpp:
#include "student.h"
//更多精彩点击我头像,有惊喜
int main()
{
while (1)
{
Menu();
key_down();
}
system("pause");
return 0;
}
展开全部
#include<iostream>
using namespace std;
typedef struct node
{
int num;
char name[20];
}node;
//思路给出来了,其余的你应该会了吧,不懂得话私信我有偿(给多少随意)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询