直接从a[1]a[2]a[3]......开始存储#includestdio.h #includestdlib.h #includestring.h #includemalloc.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(i1;in;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-lenn; } // 查找第i个元素的值 elemType get (seqList *L ,int i ) { if ((i1)||(iL-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(i1;iL-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(iL-len) { printf(查无此人\n); } } //在第i个位置插入元素 void insert(seqList *L,int i,Student e) { int k; if((i1)||(iL-len1)) //插入位置不合理 { printf(/插入位置不合理\n); } if(L-lenL-maxSize-1)//空间满了无法插入元素 { printf(空间满了无法插入元素\n); } if(iL-len1) { L-elem[i]e; } if((i1)(iL-len)) { for(kL-len1;ki;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((i1)||(iL-len)) //删除位置不合理 { printf(/删除位置不合理\n); return 0; } for(ki;kL-len;k) { L-elem[k]L-elem[k1]; } L-len--; printf(删除成功\n); return 1; } //逐个输出顺序表中的元素 void print(seqList *L) { int i; printf(学生表中所有学生的信息有\n); for(i1;iL-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 *Llist; 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(欢迎下次使用再见); }
构建顺序表
直接从a[1]a[2]a[3]......开始存储#includestdio.h #includestdlib.h #includestring.h #includemalloc.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(i1;in;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-lenn; } // 查找第i个元素的值 elemType get (seqList *L ,int i ) { if ((i1)||(iL-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(i1;iL-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(iL-len) { printf(查无此人\n); } } //在第i个位置插入元素 void insert(seqList *L,int i,Student e) { int k; if((i1)||(iL-len1)) //插入位置不合理 { printf(/插入位置不合理\n); } if(L-lenL-maxSize-1)//空间满了无法插入元素 { printf(空间满了无法插入元素\n); } if(iL-len1) { L-elem[i]e; } if((i1)(iL-len)) { for(kL-len1;ki;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((i1)||(iL-len)) //删除位置不合理 { printf(/删除位置不合理\n); return 0; } for(ki;kL-len;k) { L-elem[k]L-elem[k1]; } L-len--; printf(删除成功\n); return 1; } //逐个输出顺序表中的元素 void print(seqList *L) { int i; printf(学生表中所有学生的信息有\n); for(i1;iL-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 *Llist; 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(欢迎下次使用再见); }