直接从a[1],a[2],a[3]......开始存储
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> #define INITSIZE 100 typedef int elemType; //建立元素 typedef struct { char name[10]; //姓名 char no[8]; //8位学号 int price; //成绩 }Student; typedef struct { Student *elem; // 顺序表存储数组,存放实际的数据元素。(数组指针elem指示线性表的基地址) int len; // 顺序表中的元素个数,亦称表的长度。 int maxSize; // 顺序表的的最大可能的长度。 } seqList; //初始化顺序表 void initialize(seqList *L) { L->elem = (Student *) malloc(sizeof(Student) * INITSIZE);//申请动态数组 if (!L->elem) exit(-1); L->maxSize = INITSIZE-1; //0下标位置不放元素 L->len = 0; } //输入元素 void input(seqList *L) { int n,i; printf("请输入需要录入的学生人数:"); scanf("%d",&n); for(i=1;i<=n;i++) { printf("第%d个学生的名字:",i); scanf("%s",L->elem[i].name); printf("第%d个学生的学号:",i); scanf("%s",L->elem[i].no); printf("第%d个学生的成绩:",i); scanf("%d",&L->elem[i].price); printf("\n"); } L->len=n; } // 查找第i个元素的值 elemType get (seqList *L ,int i ) { if ((i<1)||(i>L->len)) exit(1); printf("第%d个学生的信息为:\n",i); printf("姓名:%s ",L->elem[i].name); printf("学号:%s ",L->elem[i].no); printf("成绩:%d\n",L->elem[i].price); return 1; } //根据内容查找元素 void findbyname(seqList *L,char name[]) { int i; for(i=1;i<=L->len;i++) { if(strcmp(L->elem[i].name,name)==0) { printf("%s的学号为:",name); printf("%s\n",L->elem[i].no); printf("%s的成绩为:",name); printf("%d\n",L->elem[i].price); break; } } if(i>L->len) { printf("查无此人\n"); } } //在第i个位置插入元素 void insert(seqList *L,int i,Student e) { int k; if((i<1)||(i>L->len+1)) //插入位置不合理 { printf("/插入位置不合理\n"); } if(L->len==L->maxSize-1)//空间满了,无法插入元素 { printf("空间满了,无法插入元素\n"); } if(i==L->len+1) { L->elem[i]=e; } if((i>=1)&&(i<=L->len)) { for(k=L->len+1;k>i;k--) { L->elem[k]=L->elem[k-1]; } L->elem[i]=e; } L->len++; printf("插入成功\n"); } //删除第i个元素 int remove(seqList *L,int i) { int k; if((i<1)||(i>L->len)) //删除位置不合理 { printf("/删除位置不合理\n"); return 0; } for(k=i;k<=L->len;k++) { L->elem[k]=L->elem[k+1]; } L->len--; printf("删除成功\n"); return 1; } //逐个输出顺序表中的元素 void print(seqList *L) { int i; printf("学生表中所有学生的信息有:\n"); for(i=1;i<=L->len;i++) { printf("第%d个学生的信息:\n",i); printf("姓名:%s;",L->elem[i].name); printf("学号:%s;",L->elem[i].no); printf("成绩:%d\n",L->elem[i].price); } } //求顺序表中元素的总数 int lengthlist(seqList *L) { printf("表中学生总人数为:%d\n",L->len); return 0; } void main() { int a,i; char answer[20],name[20]; Student e; seqList list; seqList *L=&list; initialize(L); input(L); do { printf("******************************************************************\n"); printf("请选择:打印学生信息:1\n根据指定位置返回相应学生信息:2\n通过姓名查询学生学号和成绩:3\n插入学生信息:4\n删除学生信息:5\n统计表中学生人数:6\n"); printf("******************************************************************\n"); scanf("%d",&a); switch(a) { case 1:print(L);break; case 2: printf("请输入查找的位置:"); scanf("%d",&i); get (L,i);break; case 3: printf("请输入查找学生的姓名:"); scanf("%s",name); findbyname(L,name);break; case 4: printf("请输入插入的位置:"); scanf("%d",&i); printf("请输入插入的信息:\n"); printf("学生姓名:"); scanf("%s",e.name); printf("学生学号:"); scanf("%s",e.no); printf("学生成绩:"); scanf("%d",&e.price); insert(L,i,e);break; case 5: printf("请输入删除的位置:"); scanf("%d",&i); remove(L,i);break; case 6: lengthlist(L);break; default:printf("error\n"); } printf("是否进行下一步操作?(y or n)"); scanf("%s",answer); } while(strcmp(answer,"y")==0); printf("欢迎下次使用,再见!"); }