顺序表来存储学生信息时,学生是结构体变量,则在线性表中的元素变量都是结构体类型,线性表的每个存储单元存储一个学生的信息包括学号、年纪等其他信息。
在初始化线性表数据时可以使用结构体数组的方式往线性表中放入数据,一个结构体数组成员就代表了一个线性存储单元,可以使用指针或是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);
}
这篇博客介绍如何使用顺序表存储学生信息,通过结构体数组存储学号、年龄等信息。文中提供了初始化线性表、插入、删除学生信息以及显示所有学生信息的函数实现。示例代码展示了如何创建、操作顺序表并进行动态扩展。
3487

被折叠的 条评论
为什么被折叠?



