顺序表基本操作

//顺序表的基本操作
#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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值