//顺序表的基本操作
#include<stdio.h>
#include<string.h>
#define MAXLEN 10
typedef struct { //定义节点
char key[10];
char name[10];
int age;
}SD;
typedef struct{ //节点顺序表
SD Listsd[MAXLEN];
int ListLen;
}SDType;
void Init(SDType *sdt){
sdt->ListLen=0; //初始化
}
int Add(SDType *sdt,SD sd){ //添加节点
if(sdt->ListLen>=MAXLEN){
sdt->Listsd[sdt->ListLen++]=sd;
printf("表已满");
return 0;
}
sdt->Listsd[sdt->ListLen++]=sd;
return 1;
}
int Insert(SDType *sdt,int n,SD sd){ //插入节点
int i;
if(sdt->ListLen>=MAXLEN){
printf("已满");
return 0;
}
if(n<1||n>sdt->ListLen){
printf("插入位置有误");
return 0;
}
for(i=sdt->ListLen;i>=n;i--){
sdt->Listsd[i+1]=sdt->Listsd[i];
}
sdt->Listsd[n]=sd;
sdt->ListLen++;
return 1;
}
int delete(SDType *sdt,int n){ //删除节点
int i;
if(n<1||n>sdt->ListLen+1){
printf("输入序号错误");
return 0;
}
for(i=n;i<sdt->ListLen;i++)
sdt->Listsd[i]=sdt->Listsd[i+1];
sdt->ListLen--;
return 1;
}
SD *FindByNum(SDType *sdt,int n){ //根据序号查找结点
if(n<0||n>sdt->ListLen){
printf("输入序号错误");
return 0;
}
return &(sdt->Listsd[n]);
}
int FindByKey(SDType *sdt,char *key){ //根据关键字查找结点
int i;
for(i=0;i<=sdt->ListLen;i++){
if(strcmp(sdt->Listsd[i].key,key)==0)
return i;
}
return 0;
}
int show(SDType *sdt){ //输出节点
int i;
for(i=0;i<sdt->ListLen;i++)
printf("(%s,%s,%d)\n",sdt->Listsd[i].key,sdt->Listsd[i].name,sdt->Listsd[i].age);
return 0;
}
int main()
{
int i;
SDType sdt;
SD sd;
SD *sd2;
char key[10];
Init(&sdt);
do{
printf("输入添加的节点(学号 姓名 年龄):");
fflush(stdin); //清空输入缓冲区
scanf("%s%s%d",&sd.key,&sd.name,&sd.age);
fflush(stdin);
if(!Add(&sdt,sd))
break;
// printf("你好\n");
}while(1);
printf("\n节点顺序\n");
show(&sdt);
fflush(stdin);
printf("要查找的关键字:");
scanf("%s",key);
i=FindByKey(&sdt,key);
sd2=FindByNum(&sdt,i);
if(sd2)
printf("第%d个节点为:(%s %s %d)\n",i,sd2->key,sd2->name,sd2->age);
return 0;
}
顺序表基本操作
最新推荐文章于 2023-05-01 18:00:11 发布