先建个SeqList.h
代码如下
#include
#include
#define MAXN 100 //定义线性表的长度
typedef struct
{
DATAListData[MAXN+1];//保存线性表的数组
intListLen;//顺序表已存数据长度
}SeqListType;
void SeqListInit(SeqListType *SL);//初始化顺序表
int SeqListLength(SeqListType *SL);//返回顺序表元素数量
int SeqListAdd(SeqListType *SL,DATA data);//向顺序表中添加元素
int SeqListInsert(SeqListType *SL,int n,DATAdata);//向顺序表中插入数据
int SeqListDelete(SeqListType *SL,int n);//删除顺序表中元素
DATA *SeqListFindByNum(SeqListType *SL,int n);//根据序号找元素返回
int SeqListFindByCont(SeqListType *SL,char *key);//按关键字查找
int SeqListAll(SeqListType *SL);//查找所有元素
接着建个SeqList.c来实现这些基本操作
//初始化顺序表
void SeqListInit(SeqListType *SL)
{
SL->ListLen=0; //初始化时,设置顺序表长度为0;
}
//返回顺序表元素个数
int SeqListLength(SeqListType *SL)
{
return(SL->ListLen);
}
//添加元素到顺序表尾部
int SeqListAdd(SeqListType *SL,DATA data)
{
if(SL->ListLen>=MAXN)
{
printf("顺序表已满,不能再添加结点了");
return0;
}
SL->ListData[++SL->ListLen]=data;
return1;
}
//向指定位置添加数据
int SeqListInsert(SeqListType *SL,int n,DATA data)
{
int i;
if(SL->ListLen >MAXN)
{
printf("顺序表已满,不能再添加结点了");
return0;
}
if(n<1||n>SL->ListLen-1)
{
printf("插入元素序号错误");
return0;
}
for(i=SL->ListLen;i>=n;i--)//插入时现将顺序表中数据向后移动
{
SL->ListData[i+1] = SL->ListData[i];
}
SL->ListData[n] = data;
SL->ListLen++;
return1;
}
//删除顺序表中元素
int SeqListDelect(SeqListType *SL,int n)
{
int i;
if(n<1||n>SL->ListLen)
{
printf("插入元素序号错误");
return0;
}
for(i=n;i<=SL->ListLen;i++)
{
SL->ListData[i]=SL->ListData[i+1];
}
SL->ListLen--;
return1;
}
//根据序号找元素返回
DATA *SeqListFindByNum(SeqListType *SL,int n)
{
if(n<1||n>SL->ListLen)
{
printf("插入元素序号错误");
returnNULL;
}
return&(SL->ListData[n]);
}
//按关键字查找
int SeqListFindByCont(SeqListType *SL,char *key)
{
int i;
for(i=1;i<=SL->ListLen;i++)
{
if(strcmp(SL->ListData[i].key,key)==0)
returni;
}
return0;
}
最后编写个测试类
#include
typedef struct
{
charkey[15];//结点的关键字
charname[20];
intage;
}DATA;//定义结点类型,可定义为简单类型,也可定义为结构
#include "SeqList.h"
#include "SeqList.c"
int SeqListAll(SeqListType *SL)//查找所有元素
{
int i;
for(i=1;i<=SL->ListLen;i++)
{
printf("%s,%s,%d\n",SL->ListData[i].key,SL->ListData[i].name,SL->ListData[i].age);
}
}
int main()
{
int i;
SeqListTypeSL;//定义顺序表变量
DATAdata,*data1;//定义结点保存数据类型变量和指针变量
charkey[15];
SeqListInit(&SL);
do
{
printf("输入添加的结点(学号,姓名,年龄)");
fflush(stdin);//清空输入缓冲区
scanf("%s%s%d",&data.key,&data.name,&data.age);
if(data.age)//若年龄为0
{
if(!SeqListAdd(&SL,data))
break;
}
else
break;
}while(1);
printf("\n顺序表中的结点顺序\n");
SeqListAll(&SL);
fflush(stdin);//清空输入缓冲区
printf("\n要取出结点的序号:");
scanf("%d",&i);//输入结点序号
data1 =SeqListFindByNum(&SL,i);
if(data1)
{
printf("第%d个节点为:(%s,%s,%d)\n",i,data1->key,data1->name,data1->age);
}
fflush(stdin);//清空输入缓冲区
printf("要查关键字");
scanf("%s",key);//输入关键字
i=SeqListFindByCont(&SL,key);
data1 =SeqListFindByNum(&SL,i);
if(data1)
printf("笥d个节点为:(%s,%s,%d)\n",i,data1->key,data1->name,data1->age);
while(1);
return 0;
}
最后可以看到运行结果如下:
代码如下
#include
#include
#define MAXN 100 //定义线性表的长度
typedef struct
{
DATAListData[MAXN+1];//保存线性表的数组
intListLen;//顺序表已存数据长度
}SeqListType;
void SeqListInit(SeqListType *SL);//初始化顺序表
int SeqListLength(SeqListType *SL);//返回顺序表元素数量
int SeqListAdd(SeqListType *SL,DATA data);//向顺序表中添加元素
int SeqListInsert(SeqListType *SL,int n,DATAdata);//向顺序表中插入数据
int SeqListDelete(SeqListType *SL,int n);//删除顺序表中元素
DATA *SeqListFindByNum(SeqListType *SL,int n);//根据序号找元素返回
int SeqListFindByCont(SeqListType *SL,char *key);//按关键字查找
int SeqListAll(SeqListType *SL);//查找所有元素
接着建个SeqList.c来实现这些基本操作
//初始化顺序表
void SeqListInit(SeqListType *SL)
{
SL->ListLen=0; //初始化时,设置顺序表长度为0;
}
//返回顺序表元素个数
int SeqListLength(SeqListType *SL)
{
return(SL->ListLen);
}
//添加元素到顺序表尾部
int SeqListAdd(SeqListType *SL,DATA data)
{
if(SL->ListLen>=MAXN)
{
printf("顺序表已满,不能再添加结点了");
return0;
}
SL->ListData[++SL->ListLen]=data;
return1;
}
//向指定位置添加数据
int SeqListInsert(SeqListType *SL,int n,DATA data)
{
int i;
if(SL->ListLen >MAXN)
{
printf("顺序表已满,不能再添加结点了");
return0;
}
if(n<1||n>SL->ListLen-1)
{
printf("插入元素序号错误");
return0;
}
for(i=SL->ListLen;i>=n;i--)//插入时现将顺序表中数据向后移动
{
SL->ListData[i+1] = SL->ListData[i];
}
SL->ListData[n] = data;
SL->ListLen++;
return1;
}
//删除顺序表中元素
int SeqListDelect(SeqListType *SL,int n)
{
int i;
if(n<1||n>SL->ListLen)
{
printf("插入元素序号错误");
return0;
}
for(i=n;i<=SL->ListLen;i++)
{
SL->ListData[i]=SL->ListData[i+1];
}
SL->ListLen--;
return1;
}
//根据序号找元素返回
DATA *SeqListFindByNum(SeqListType *SL,int n)
{
if(n<1||n>SL->ListLen)
{
printf("插入元素序号错误");
returnNULL;
}
return&(SL->ListData[n]);
}
//按关键字查找
int SeqListFindByCont(SeqListType *SL,char *key)
{
int i;
for(i=1;i<=SL->ListLen;i++)
{
if(strcmp(SL->ListData[i].key,key)==0)
returni;
}
return0;
}
最后编写个测试类
#include
typedef struct
{
charkey[15];//结点的关键字
charname[20];
intage;
}DATA;//定义结点类型,可定义为简单类型,也可定义为结构
#include "SeqList.h"
#include "SeqList.c"
int SeqListAll(SeqListType *SL)//查找所有元素
{
int i;
for(i=1;i<=SL->ListLen;i++)
{
printf("%s,%s,%d\n",SL->ListData[i].key,SL->ListData[i].name,SL->ListData[i].age);
}
}
int main()
{
int i;
SeqListTypeSL;//定义顺序表变量
DATAdata,*data1;//定义结点保存数据类型变量和指针变量
charkey[15];
SeqListInit(&SL);
do
{
printf("输入添加的结点(学号,姓名,年龄)");
fflush(stdin);//清空输入缓冲区
scanf("%s%s%d",&data.key,&data.name,&data.age);
if(data.age)//若年龄为0
{
if(!SeqListAdd(&SL,data))
break;
}
else
break;
}while(1);
printf("\n顺序表中的结点顺序\n");
SeqListAll(&SL);
fflush(stdin);//清空输入缓冲区
printf("\n要取出结点的序号:");
scanf("%d",&i);//输入结点序号
data1 =SeqListFindByNum(&SL,i);
if(data1)
{
printf("第%d个节点为:(%s,%s,%d)\n",i,data1->key,data1->name,data1->age);
}
fflush(stdin);//清空输入缓冲区
printf("要查关键字");
scanf("%s",key);//输入关键字
i=SeqListFindByCont(&SL,key);
data1 =SeqListFindByNum(&SL,i);
if(data1)
printf("笥d个节点为:(%s,%s,%d)\n",i,data1->key,data1->name,data1->age);
while(1);
return 0;
}
最后可以看到运行结果如下: