typedef int status; typedef struct{
char name[10]; char num[20];
}Elemtype;
typedef struct LNode{
Elemtype data; struct LNode *next;
}LNode; 算法设计: 1.IntiaList:
初始化线性表,传入的是头结点地址的地址。释放*L,重新申请一个节点作为表头节点,返回新的指向该表头节点的指针的指针。
2.DestroyList:
销毁头结点中首结点址针指向的线性存储空间,传入的是头结点地址,并且销毁文件。
3.ClearList:
与Destroy类似但是又有不同,ClearList并不销毁物理空间,而是修改逻辑关系值。
4.ListEmpty:
判空功能,判断表是否为空表。传入头结点地址,若头节点的next为空指针,则表空,否则不空。
5.ListLength:
求表长功能,传入头结点地址,每向下取一次节点,计数器自增1,直至为空,此时计数器值为表长。
6.Search:
根据用户所选取的查找关键字进行查找。查找方式为逐节点查找,一旦找到便返回包含该关键字的数据元素的所有信息。
7.ListInset:
插入一个数据元素,传入头结点地址的地址、插入位置i、临时表结点值。在调用插入函数前构造一个临时结点,用于存储数据元素信息。进入插入子函数,插入前先判断插入位置是否合理。先断开所插位置,将临时节点插入。 8.ListDelete:
删除一个数据元素,传入头结点地址的地址、删除位置i。删除前先判断位置是否合理,先删除元素,将删除节点的前继和后继相连,释放删除节点。
23
9.ListMod:
修改一个元素的信息,调用Search来找到所要修改的节点,根据用户要求自行修改,返回头结点地址。 10.ListTrabverse:
传入头结点地址,循环访问各个元素,直至到表尾停止。
3.4 输入输出设计
同实验一相同,此处不再赘述。
3.5 源程序及注释
#include
/*------------------------------------------------------*/ typedef int status; typedef struct{
char name[10]; char num[20];
}Elemtype;
typedef struct LNode{
Elemtype data; struct LNode *next;
}LNode;
24
int changed=0; char req; LNode *loc;
/*------------------------------------------------------*/ status IntiaList(LNode ** L); status DestroyList(LNode * L); status ClearList(LNode *L); status ListEmpty(LNode *L); int ListLength(LNode *L); status Search(LNode *L); status LinkInsert(LNode *L); status LinkDelete(LNode *L); status LinkMod(LNode *L); status LinkTrabverse(LNode *L);
/*------------------------------------------------------*/ status equal(Elemtype x, Elemtype y);
void display(Elemtype e); void Save(LNode *L); //status Save(LNode* L); status Load(LNode**L); status creat(LNode **L);
/*------------------------------------------------------*/ void menu(void);
/*------------------------------------------------------*/ char file0[20]; int main(void){
int op=0; do{
LNode *L; system(\ menu();
printf(\ req=getchar();getchar(); if (req=='Y' ||req=='y') creat(&L);
25
else {
printf(\ req=getchar(); if (req=='Y' ||req=='y'){ if (Load(&L)==OK) {
puts(\ printf(\ getchar();}
else {printf(\ } else {
printf(\ getchar();getchar();}
}
system(\ menu();
printf(\ Then please input your option[0-12]:\ scanf(\ switch(op){
case 0: break;
case 1: {printf(\ here is IntiaList(),which being
realized\\n\
if (IntiaList(&L)==OK){
printf(\ //printf(\ }
else {
printf(\realised!!Maybe the cause is getchar();getchar();} break;}
overflow\\n\
case 2: {printf(\ here is DestroyList(),which being
26

