使用顺序表完成学生信息的存储

这篇博客介绍如何使用顺序表存储学生信息,通过结构体数组存储学号、年龄等信息。文中提供了初始化线性表、插入、删除学生信息以及显示所有学生信息的函数实现。示例代码展示了如何创建、操作顺序表并进行动态扩展。

顺序表来存储学生信息时,学生是结构体变量,则在线性表中的元素变量都是结构体类型,线性表的每个存储单元存储一个学生的信息包括学号、年纪等其他信息。

在初始化线性表数据时可以使用结构体数组的方式往线性表中放入数据,一个结构体数组成员就代表了一个线性存储单元,可以使用指针或是l.elem[i-1].var来访问位于线性表第i个位置的学生的信息。

程序如下:

#include<stdlib.h>
#include<iostream>
using namespace std;
#define INIT 10
#define increment 2

//定义学生信息结构体
typedef struct
{
  int num;
  int age;
}stu;

//定义线性表结构体
typedef struct 
{ stu *elem;
        int lengh;
int initsize;
}link;
link L;//定义全局线性表变量L
void Init(link &l)//初始化线性表
{
l.elem=(stu*)malloc(sizeof(stu)*INIT);
if(!l.elem)cout<<"分配内存出错"<<endl;
l.lengh=0;
l.initsize=INIT;
}
void Insert(link &l,int i,stu e)//向线性表中插入新元素
{ stu *newbase;  
int j;
if(i<1||i>l.lengh+1)cout<<"插入位置不正确"<<endl;  //判断位置是否合适
if(l.lenght>=l.initsize)   //判断是否越界,并开辟新空间
{ newbase=(stu*)realloc(l.elem,(l.initsize+increment));
    if(!newbase)printf("error\n");
l.elem=newbase;
l.initsize+=increment;
}
for(j=l.lengh;j>=i;j--)
l.elem[j]=l.elem[j-1];                //插入位置及之后元素的右移 
l.elem[i-1]=e;
l.lengh++;
}
void SIn(link &l)//插入新的学生信息

{ stu e1;
                int k;
cout<<"请输入编号:"<<endl;
cin>>e1.num;
cout<<"请输入年龄:"<<endl;
cin>>e1.age;
cout<<"请输入要插入的位置:"<<endl;
cin>>k;
Insert(L,k,e1);//插入此学生信息

}
void Delete(link &l,int i)
{ stu e2;
if(i<1||i>l.lengh)cout<<"删除位置不正确"<<endl;
int j=l.lengh;  
e2=l.elem[i-1] ;
for(i;i<j;i++)
l.elem[i-1]=l.elem[i];
l.lengh--;


}
//show these date of students
void Show(link &l)
{
stu *p=&l.elem[0];
stu *q=&l.elem[l.lengh-1];
for(;p<=q;p++)
{
cout<<"show the student's inforamtion:"<<endl;
cout<<p->num<<" "<<p->age<<endl;//or l.elem[i].age

}

}
//主函数
 void main()
 { stu s[2]={{1,23},{2,24}};//以结构体数组的形式来初始化学生信息值
    int f;
        Init(L);//建立线性表
for(int i=0;i<2;i++)Insert(L,i+1,s[i]);  //插入初始学生信息  
Show(L);
        SIn(L);//插入其他学生信息
Show(L);
cout<<"请输入要删除的位置:"<<endl;
cin>>f;
Delete(L,f);//删除学生信息
Show(L);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值