采用单向链表建立一个学生信息表,每个节点包括学号(int型),姓名(字符型20位),成绩(int型),并输出。

要求要用动态链表
要求用户可以新建或者删除信息表里面的信息,另外是用C++语言编译

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

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-12-24
感觉你应该是想用c语言
具体语法已经忘了,你自己补充。
typedef struct {
int id,

char[20] name,

int score,

student *next

} student;
//下面就用for建立一个链表,把next指向另一个strudent.
//输出就不说了,只要结构有了,你应该有思路了本回答被网友采纳
第2个回答  2017-10-11
#include<iostream>
using namespace std;
typedef struct node
{
    int num;
    char name[20];
}node;
//思路给出来了,其余的你应该会了吧,不懂得话私信我有偿(给多少随意)

...编写一个完整的C++语言程序,输入信息:学生的学号,姓名,成绩...
void InsertList(ListNode *h,int i,char name[],int e,int n);void DeleteList(ListNode *h,int i,int n);void DisplayNote(void);\/*---函数实现部分---*\/ int main(int argc, char* argv[]){ ListNode *h;int i=1,n,score;char name[10];int *m=0;cout<<m<<endl;while(i)...

单链表创建学生信息(包括学号、姓名、成绩)并对线性表实现查找,插入...
void TravelListBack();void DelList(int pNum);pNode gHead = NULL;pNode gTail = NULL;int k=0;int num=0;int pNum=0;void main(){ printf("Input num\\n");scanf("%d",&num);int i=0;pNode pNodeTemp=NULL;for(i=0;i<num;i++){ printf("Input Name\\n");scanf("%s",D...

建立一个链表,每个节点包括学生的学号、姓名、性别、年龄,学号
int num;char name[20];char sex[4];int age;struct data*next;};int main(){ int i,k;struct data*head,*p,*q,*t;head=t=p=q=(struct data*)malloc(sizeof(struct data));printf("输入学号:");scanf("%d",&p->num);getchar();printf("输入姓名:");gets(p->name);printf("...

建立一个链表,记录学生的姓名,学号和成绩,
public StudentPerson(int studentID, string studentName ,string studentPoint) { pri_ID = studentID ; pri_Name = studentName ; pri_Point = studentPoint ; } public StudentPerson() {} private int pri_ID ; private string pri_Name; private decimal pri_Point ; \/\/\/ \/\/\/ 学生学号 \/\/\/ pu...

...设计:建立一个学生信息链表,包括学号,姓名,成绩.(实现添加,删除,查询...
代码如下:\/*用c语言链表编写一个学生信息系统程序,要求输出学生的学号,姓名,性别,学号,姓名,成绩(实现添加,删除,查询,排序,平均)*\/ include <stdio.h> include <iostream> include <string.h> include <stdlib.h> using namespace std;const int n=5;\/ nodeEntry : 节点数据类型 nodeADT...

编制一个c语言成绩记录簿,每个学生信息包括:学号,姓名,c语言成绩.
char name[20]; \/\/ 课程名字 int result; \/\/ 学生的成绩 float credit; \/\/ 学分 };\/\/ 定义成绩记录簿的结构体,每个学生修了4门课 struct scorelist { int num; \/\/学号 char name[10]; \/\/学生姓名 struct course subject[4]; \/\/课程相关的数据。意思是一个学生修了4门课 };int ...

建立一个链表,每个节点包括学生的学号、姓名、性别、年龄。先输入5个学...
include<stdlib.h> include<string.h> struct student { int num;char name[24];char sex[12];int age;struct student *next;};struct student *creat(void){ int n=0;struct student *head,*p1,*p2;head=NULL;p1=p2=(struct student *)malloc(sizeof(struct student));scanf("%d %s %s...

首先建立一个链表,每个节点包括学号、姓名、性别、年龄;然后输入一个...
int temp;p = before = head = NULL;printf("请输入一个学生,以回车分开\\n");while(1){ p = (struct STU *)malloc(sizeof(struct STU));printf("学号:");scanf("%s", p->number);printf("姓名:");scanf("%s", p->name);printf("性别(女填0,男填1):");scanf("%d", &...

输入若干个学生信息(学号、姓名和成绩),输入学号为0时输入结束。建立一...
include<string.h> struct stud_node{ int num;char name[20];int score;struct stud_node *next; \/*定义结构类型变量 stud_node为全局变量*\/ };struct stud_node *Creat_Stu_Doc();struct stud_node *DeleteDoc(struct stud_node *head,int min_score);void Ptrint_Stu_Doc(struct stud...

编制一个c语言成绩记录簿,每个学生信息包括:学号,姓名,c语言成绩...
编制一个c语言成绩记录簿,每个学生信息包括:学号,姓名,c语言成绩.具体功能:(1)创建信息链表并以磁盘文件保存;(2)读取磁盘文件并显示输出所有学生的成绩;(3)按学号... 编制一个c语言成绩记录簿,每个学生信息包括:学号,姓名,c语言成绩. 具体功能:(1)创建信息链表并以磁盘文件保存;(2)读取磁盘文件并显示输出所有...

相似回答