提升:
建立一个如下的学生情况表,要求先依次输入学生数据元素,然后依次显示当前表中的学生数据元素。
学号 姓名 性别 年龄
2000001 张三 男 20
2000002 李四 男 21
2000003 王五 女 22
头文件:SeqList.h
#include<stdio.h>
#define MaxSize 100
typedef struct Student
{
long number;
char name[10];
char sex[3];
int age;
}StudentType;
typedef StudentType DataType;
typedef struct
{
DataType list[MaxSize];
int size;
}SeqList;
void ListInitiate(SeqList *L)
{
L->size=0;
}
int ListLength(SeqList L)
{
return L.size;
}
int ListInsert(SeqList *L,int i, DataType x)
{
int j;
if(L->size>=MaxSize)
{
printf("数组已满无法插入!\n");
return 0;
}
else if(i<0||i>L->size)
{
printf("参数i不合法!\n");
return 0;
}
else
{
for(j=L->size;j>i;j--)
L->list[j]=L->list[j-1];
L->list[i]=x;
L->size++;
return 1;
}
}
int ListDelete(SeqList *L,int i,DataType *x)
{
int j;
if(L->size<=0)
{
printf("顺序表已空无数据可删!\n");
return 0;
}
else if(i<0||i>L->size-1)
{
printf("参数i不合法");
return 0;
}
else
{
*x=L->list[i];
for(j=i+1;j<=L->size-1;j++)
L->list[j-1]=L->list[j];
L->size--;
return 1;
}
}
int ListGet(SeqList L,int i,DataType *x)
{
if(i<0||i>L.size-1)
{
printf("参数i不合法!\n");
return 0;
}
else
{
*x=L.list[i];
return 1;
}
}
源文件:提升题.c
#include"SeqList.h"
int main()
{
SeqList myList;
int i;
StudentType x[3];
printf("请输入学生数据:\n");
for (i=0;i<3;i++)
{
scanf("%ld %s %s %d",&x[i].number,x[i].name,x[i].sex,&x[i].age);
}
StudentType s;
ListInitiate(&myList);
ListInsert(&myList,0,x[0]);
ListInsert(&myList,1,x[1]);
ListInsert(&myList,2,x[2]);
printf("\n输出的学生数据结果为:\n");
for(i=0;i<ListLength(myList);i++)
{
ListGet(myList,i,&s);
printf("%ld %s %s %d\n",s.number,s.name,s.sex,s.age);
}
return 0;
}
在VS2019下,需将源文件的scanf做些修改:
#include"SeqList.h"
int main()
{
SeqList myList;
int i;
StudentType x[3];
printf("请输入学生数据:\n");
for (i = 0; i < 3; i++)
{
scanf_s("%ld %s %s %d", &x[i].number, x[i].name, (unsigned int)sizeof(x[i].name), x[i].sex, (unsigned int)sizeof(x[i].sex), &x[i].age);
}
StudentType s;
ListInitiate(&myList);
ListInsert(&myList, 0, x[0]);
ListInsert(&myList, 1, x[1]);
ListInsert(&myList, 2, x[2]);
printf("\n输出的学生数据结果为:\n");
for (i = 0; i < ListLength(myList); i++)
{
ListGet(myList, i, &s);
printf("%ld %s %s %d\n", s.number, s.name, s.sex, s.age);
}
return 0;
}