码迷,mamicode.com
首页 > 其他好文 > 详细

2.1 线性表

时间:2016-07-19 09:11:51      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:

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 }

 

2.1 线性表

标签:

原文地址:http://www.cnblogs.com/wozixiaoyao/p/5683107.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!