线性表的基本操作实现 - 链表与顺序表

注:实验用书为 数据结构 C语言版 第2版,人民邮电出版社出版。
实验题目:学生管理系统的设计与实现
实验环境:Visual C++ 6.0或其他C++环境
一、实验目的
1、掌握线性表的定义;
2、掌握线性表的基本操作,如建立、查找、插入和删除等。
二、实验内容
定义一个包含学生信息(学号,姓名,成绩)的顺序表和链表,使其具有如下功能:
1、根据指定学生个数,逐个输入学生信息;
2、逐个显示学生表中所有学生的相关信息;
3、根据姓名进行查找,返回此学生的学号和成绩;
4、根据指定的位置可返回相应的信息(学号,姓名,成绩);
5、给定一个学生信息,插入到表中指定的位置;
6、删除指定位置的学生记录;
7、统计表中学生个数。
三、实验提示
1、学生信息的定义
typedef struct {
char no[8]; //8位学号
char name[20]; //姓名
int price; //成绩
}Student;
2、顺序表的定义
typedef struct {
Student *elem; //指向数据元素的基地址
int length; //线性表的当前长度
}SqList;
3、链表的定义
typedef struct LNode{
Student data; //数据域
struct LNode *next; //指针域
}LNode,*LinkList;
四、代码
顺序表方法:

#include <iostream>
#include <stdio.h>
#include <cstring>
#include <cmath>
#include <cstdlib>
using namespace std;
#define MAXSIZE 100//假设的表的最大长度;
typedef struct{
    char no[8];   //8位学号
    char name[20]; //姓名
    int price;     //成绩
}Student,ElemType;
typedef  struct {
  Student   *elem=NULL;     //指向数据元素的基地址
  int  length;       //线性表的当前长度
 }SqList;

SqList L;//声明一个数据表

void InitList()
{
  //构造一个空的顺序表
    L.elem=new ElemType[MAXSIZE];
    if(!L.elem) exit(0);//存储分配失败退出
    L.length=0;
}
int menu_select()//选择菜单函数
{
    char s[3];
    int c;
    printf("\n         ***************主菜单**************\n");
    printf("         *    1. 录入新记录                *\n");
    printf("         *    2. 浏览显示所有记录          *\n");
    printf("         *    3. 按姓名查询记录并显示      *\n");
    printf("         *    4. 按编号查询记录并显示      *\n");
    printf("         *    5. 插入记录                  *\n");
    printf("         *    6. 删除记录                  *\n");
    printf("         *    7. 统计记录                  *\n");
    printf("         *    8. 退出                      *\n");
    printf("         ***********************************\n\n");

    do
    {
        printf("         请选择操作(1-8):");
        scanf("%s",s);
        c=atoi(s);
    }while(c<0||c>8); /*选择项不在~8之间重输*/
    return(c); /*返回选择项,主程序根据该数调用相应的函数*/
}
/*数据表取值*/
void Create()
{
  //新建学生数据
    int n;
    cout<<"根据指定学生个数,逐个输入学生信息:"<<endl;
    cout<<"学生个数n=";
    cin>>n;
    if(n<1||L.length+n>MAXSIZE){
        cout<<"创建失败"<<endl;
        return ;
    }
    for(int i=0;i<n;i++)//逐个添加数据
    {
        cout<<"第"<<i+1<<"个学生数据"<<endl<<"姓名:";
        cin>>L.elem[L.length].name;
        cout<<"学号:";
        cin>>L.elem[L.length].no;
        cout<<"成绩:";
        cin>>L.elem[L.length].price;
        L.length++;//每创建成功一个,则更新一次数量
    }
    cout<<"***操作成功***"<<endl;
}
void ShowAllDate()
{
    if(L.length<1)
    {
        cout<<endl<<"    很遗憾,空表中没有任何记录可供显示!"<<endl;
        return ;
    }
    cout<<"************ STUDENT ************"<<endl;
    cout<<"  编号     姓名     学号     成绩"<<endl;
    cout<<"---------------------------------"<<endl;
    for(int i=0;i<L.length;i++)
    {
        cout<<"   "<<i+1<<"      "<<L.elem[i].name<<"      "<<L.elem[i].no<<"      "<<L.elem[i].price<<endl
  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值