标签:
2.1 SeqList.h:
1 #include <stdio.h> 2 #include <string.h> 3 #define MAXSIZE 100 //定义线性表的最大长度 4 5 typedef struct //定义顺序表结构 6 { 7 DATA ListData[MAXSIZE+1]; //保存顺序表的数组 8 int ListLen; //顺序表已存结点 的数量 9 }SeqListType; 10 11 void SeqListInit(SeqListType *SL); //初始化顺序表 12 int SeqListLength(SeqListType *SL); //返回顺序表的元素数量 13 int SeqListAdd(SeqListType *SL,DATA data); //向顺序表中添加元素 14 int SeqListInsert(SeqListType *SL,int n,DATA data); //向顺序表中插入元素 15 int SeqListDelete(SeqListType *SL,int n); //删除顺序表中的据元素 16 DATA *SeqListFindByNum(SeqListType *SL,int n); //根据序号返回元素 17 int SeqListFindByCont(SeqListType *SL,char *key); //按关键字查找 18 int SeqListAll(SeqListType *SL);//遍历顺序表中的内容
2-2 SeqList.c
1 void SeqListInit(SeqListType *SL) //初始化顺序表 2 { 3 SL->ListLen=0; //初始化时,设置顺序表长度为0 4 } 5 int SeqListLength(SeqListType *SL) //返回顺序表的元素数量 6 { 7 return (SL->ListLen); 8 } 9 int SeqListAdd(SeqListType *SL,DATA data) //增加元素到顺序表尾部 10 { 11 if(SL->ListLen>=MAXSIZE) //顺序表已满 12 { 13 printf("顺序表已满,不能再添加结点了!\n"); 14 return 0; 15 } 16 SL->ListData[++SL->ListLen]=data; 17 return 1; 18 } 19 int SeqListInsert(SeqListType *SL,int n,DATA data) 20 { 21 int i; 22 if(SL->ListLen>=MAXSIZE) //顺序表结点数量已超过最大数量 23 { 24 printf("顺序表已满,不能插入结点!\n"); 25 return 0; //返回0表示插入不成功 26 } 27 if(n<1 || n>SL->ListLen-1) //插入结点序号不正确 28 { 29 printf("插入元素序号错误,不能插入元素!\n"); 30 return 0; //返回0,表示插入不成功 31 } 32 for(i=SL->ListLen;i>=n;i--) //将顺序表中的数据向后移动 33 SL->ListData[i+1]=SL->ListData[i]; 34 SL->ListData[n]=data; //插入结点 35 SL->ListLen++; //顺序表结点数量增加1 36 return 1; //返回成功插入 37 } 38 int SeqListDelete(SeqListType *SL,int n) //删除顺序表中的数据元素 39 { 40 int i; 41 if(n<1 || n>SL->ListLen+1) //删除元素序号不正确 42 { 43 printf("删除结点序号错误,不能删除结点!\n"); 44 return 0; //返回0,表示删除不成功 45 } 46 for(i=n;i<SL->ListLen;i++) //将顺序表中的数据向前移动 47 SL->ListData[i]=SL->ListData[i+1]; 48 SL->ListLen--; //顺序表元素数量减1 49 return 1; //返回成功删除 50 } 51 DATA *SeqListFindByNum(SeqListType *SL,int n) //根据序号返回数据元素 52 { 53 if(n<1 || n>SL->ListLen+1) //元素序号不正确 54 { 55 printf("结点序号错误,不能返回结点!\n"); 56 return NULL; //返回0,表示不成功 57 } 58 return &(SL->ListData[n]); 59 } 60 int SeqListFindByCont(SeqListType *SL,char *key) //按关键字查询结点 61 { 62 int i; 63 for(i=1;i<=SL->ListLen;i++) 64 if(strcmp(SL->ListData[i].key,key)==0) //如果找到所需结点 65 return i; //返回结点序号 66 return 0; //遍历后仍没有找到,则返回0 67 }
2-3 SeqListTest.c
1 #include <stdio.h> 2 typedef struct 3 { 4 char key[15]; //结点的关键字 5 char name[20]; 6 int age; 7 } DATA; //定义结点类型,可定义为简单类型,也可定义为结构 8 #include "2-1 SeqList.h" 9 #include "2-2 SeqList.c" 10 int SeqListAll(SeqListType *SL) //遍历顺序表中的结点 11 { 12 int i; 13 for(i=1;i<=SL->ListLen;i++) 14 printf("(%s,%s,%d)\n",SL->ListData[i].key,SL->ListData[i].name,SL->ListData[i].age); 15 } 16 int main() 17 { 18 int i; 19 SeqListType SL; //定义顺序表变量 20 DATA data,*data1; //定义结点保存数据类型变量和指针变量 21 char key[15]; //保存关键字 22 23 SeqListInit(&SL); //初始化顺序表 24 25 do { //循环添加结点数据 26 printf("输入添加的结点(学号 姓名 年龄):"); 27 fflush(stdin); //清空输入缓冲区 28 scanf("%s%s%d",&data.key,&data.name,&data.age); 29 if(data.age) //若年龄不为0 30 { 31 if(!SeqListAdd(&SL,data)) //若添加结点失败 32 break; //退出死循环 33 }else //若年龄为0 34 break; //退出死循环 35 }while(1); 36 printf("\n顺序表中的结点顺序为:\n"); 37 SeqListAll(&SL); //显示所有结点数据 38 39 fflush(stdin); //清空输入缓冲区 40 printf("\n要取出结点的序号:"); 41 scanf("%d",&i); //输入结占点序号 42 data1=SeqListFindByNum(&SL,i); //按序号查找结点 43 if(data1) //若返回的结点指针不为NULL 44 printf("第%d个结点为:(%s,%s,%d)\n",i,data1->key,data1->name,data1->age); 45 46 fflush(stdin); //清空输入缓冲区 47 printf("\n要查找结点的关键字:"); 48 scanf("%s",key); //输入关键字 49 i=SeqListFindByCont(&SL,key); //按关键字查找 ,返回结点序号 50 data1=SeqListFindByNum(&SL,i); //按序号查询,返回结点指针 51 if(data1) //若结点指针不为NULL 52 printf("第%d个结点为:(%s,%s,%d)\n",i,data1->key,data1->name,data1->age); 53 getch(); 54 return 0; 55 }
标签:
原文地址:http://www.cnblogs.com/wozixiaoyao/p/5683107.html