#include<stdio.h>
#include<string.h>
#include<conio.h>
#define MAXSIZE 100 //定义顺序表的最大长度
typedef struct
{
char key[15];
char name[20];
int age;
} DATA;
typedef struct
{
DATA ListData[MAXSIZE];
int ListLen;
} SeqListType;
void SeqListInit(SeqListType *SL); //初始化顺序表
int SeqListLength(SeqListType *SL); //返回顺序表的元素数量
int SeqListAdd(SeqListType *SL,DATA data); //向顺序表中添加元素
int SeqListInsert(SeqListType *SL,DATA data,int n); //向顺序表中插入元素
int SeqListDelete(SeqListType *SL,int n); //删除顺序表中的元素
DATA *SeqListFindByNum(SeqListType *SL,int n); //按序号返回元素
int SeqListFindByCont(SeqListType *SL,char *key); //按关键字查找
int SeqListAll(SeqListType *SL); //遍历顺序表中的内容
void SeqListInit(SeqListType *SL) //初始化顺序表
{
SL->ListLen=0; //初始化,设置长度为0
}
int SeqListLength(SeqListType *SL) //返回顺序表元素数量
{
return (SL->ListLen);
}
int SeqListAdd(SeqListType *SL,DATA data) //增加节点到顺序表尾部
{
if(SL->ListLen>=MAXSIZE)
{
printf("顺序表已满不再添加节点!");
return 0;
}
SL->ListData[SL->ListLen]=data; //保存数据到顺序表最后
SL->ListLen++;
return 1;
}
int SeqListInsert(SeqListType *SL,DATA data,int n) //插入节点到顺序表
{
int i;
if(SL->ListLen>=MAXSIZE)
{
printf("顺序表已满不再添加节点!");
return 0;
}
if(n<1 || n>SL->ListLen-1)
{
printf("插入节点序号错误,不能插入节点!");
return 0;
}
for(i=SL->ListLen;i>n;i--)
{
SL->ListData[i]=SL->ListData[i-1];
}
SL->ListData[n]=data;
SL->ListLen++;
return 1;
}
int SeqListDelete(SeqListType *SL,int n) //删除节点
{
int i;
if(n<1 || n>SL->ListLen-1)
{
printf("删除节点错误,无该节点!");
return 0;
}
for(i=n;i<SL->ListLen;i++)
{
SL->ListData[n-1]=SL->ListData[n];
}
SL->ListLen--;
return 1;
}
DATA *SeqListFindByNum(SeqListType *SL,int n) //按序号查找节点
{
if(n<0 || n>SL->ListLen)
{
printf("无此数据项!");
return 0;
}
return &(SL->ListData[n]);
}
int SeqListFindByCont(SeqListType *SL,char *key) //按关键字查找节点
{
int i;
for(i=0;i<SL->ListLen;i++)
{
if(strcmp(SL->ListData[i].key,key)==0)
return i;
}
return 0;
}
int SeqListAll(SeqListType *SL)
{
int i;
for(i=0;i<SL->ListLen;i++)
printf("(%s,%s,%d)\n",SL->ListData[i].key,SL->ListData[i].name,SL->ListData[i].age);
return 0;
}
int main()
{
int i;
SeqListType SL;
DATA data,*data1;
char key[15];
SeqListInit(&SL); //初始化顺序表
do
{
printf("输入添加的节点(学号,姓名,年龄)");
fflush(stdin); //清空缓冲区
scanf("%s%s%d",&data.key,&data.name,&data.age);
if(data.age)
{
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("\n要查找节点的关键字:");
scanf("%s",key);
i=SeqListFindByCont(&SL,key);
data1=SeqListFindByNum(&SL,i);
if(data1)
printf("第%d个节点为:(%s,%s,%d)\n",i+1,data1->key,data1->name,data1->age);
getch();
return 0;
}
C语言学习——顺序表
最新推荐文章于 2023-07-09 18:04:32 发布