P22 例2-2 编程实现如下任务:建立一个如表2-1所示的学生情况表,要求先依次输入数据元素,然后依次显示当前表中的数据元素。假设该表数据元素个数在最坏情况下不会超过100个。要求使用顺序表。
头文件: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; } }源文件:SeqList.c
#include"SeqList.h" int main() { SeqList myList; int i; StudentType x[3] = { {2000001,"张三","男",20}, {2000002,"李四","男",21}, {2000003,"王五","女",22} }; StudentType s; ListInitiate(&myList); ListInsert(&myList, 0, x[0]); ListInsert(&myList, 1, x[1]); ListInsert(&myList, 2, x[2]); 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; }