数据结构顺序表应用

#include<stdio.h>
#include<stdlib.h>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 stdlib.h>
#include<string.h>
#define maxsize 100
typedef struct //顺序表的定义
{
char num[20];
char name[20];
int price;
}student;
typedef struct
{
student *elem;
int length;
}sqlist;
void creatlist(sqlist *l)//构建顺序表
{
int i,n;
l->elem=(student*)malloc(maxsize*(sizeof(student)));
if(!l->elem)
exit(0);
l->length=0;
printf("请输入人数:\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("请输入第%d位学生信息\n",i);
printf("学号:\n");
scanf("%s",l->elem[l->length].num);
printf("姓名:\n");
scanf("%s",l->elem[l->length].name);
printf("成绩:\n");
scanf("%d",&l->elem[l->length].price);
l->length++;
}
}
void show(sqlist *l)//输出当前顺序表
{int n=l->length;
  for(int i=1;i<=n;i++)
  {
  printf("第%d个学生信息: ",i);
  printf("学号  %s\t\t姓名  %s\t\t成绩  %d\n",l->elem[i-1].num,l->elem[i-1].name,l->elem[i-1].price);
  }
}
void search1(sqlist *l)//按姓名查找
{
char  ch[20];
int i,k=0;
printf("请输入要查寻学生姓名:");
scanf("%s",ch);
for(i=0;i<l->length;i++)
{
if(strcmp(l->elem[i].name,ch)==0)
{k=1;
printf("要查询学生信息如下:\n");
printf("学号  %s\t\t姓名  %s\t\t成绩  %d\n",l->elem[i].num,l->elem[i].name,l->elem[i].price);
        break;
}
}
if(k==0)
printf("未查询到该生信息,请核对后重新操作\n");
}
void search2(sqlist *l)//按位置查找
{
int i,n;
printf("请输入要查询学生位置序号:");
scanf("%d",&n);
if(n<=0||n>l->length)
printf("该位置没有学生信息,请核对后重新操作\n");
else
{
   for(i=0;i<l->length;i++)
 {
if(i+1==n)
{
printf("该位置学生信息如下:\n");
printf("学号  %s\t\t姓名  %s\t\t成绩  %d\n",l->elem[i].num,l->elem[i].name,l->elem[i].price);
         break;
   }
 }
    } 
}
void add(sqlist *l)//添加学生信息
{
  int n,i;
  printf("请输入要插入学生信息的位置: ");
  scanf("%d",&n);
  if(n<=0||n>l->length+1)
  printf("要插入信息的位置不存在,请核对后重新操作\n");
  else
  {l->length++;
  for(i=l->length-1;i>=0;i--)
{
if(i+1==n)
{
printf("请输入要插入学生信息:\n");
printf("学号:\n");
scanf("%s",l->elem[i].num);
printf("姓名:\n");
scanf("%s",l->elem[i].name);
printf("成绩:\n");
scanf("%d",&l->elem[i].price);
printf("插入成功!\n");
break;
}
else
{
strcpy(l->elem[i].num,l->elem[i-1].num);
strcpy(l->elem[i].name,l->elem[i-1].name);
l->elem[i].price=l->elem[i-1].price;

}
}
 
  }
 
}
void dele(sqlist *l)//按位置删除学生信息
{
  int n,i,j;
  printf("请输入要删除学生信息的位置: ");
  scanf("%d",&n);
  if(n<=0||n>l->length)
  printf("要删除信息的位置不存在,请核对后重新操作\n");
  else
  {
  for(i=0;i<l->length;i++)
{
  if(i+1==n)

  for(j=i;j<l->length-1;j++)
   {
strcpy(l->elem[j].num,l->elem[j+1].num);
strcpy(l->elem[j].name,l->elem[j+1].name);
l->elem[j].price=l->elem[j+1].price;
}
}
l->length--;
 
}
printf("删除成功!\n");
  }
}
int main()
{
sqlist a,*l=&a;
printf("1、添加学生信息构建顺序表\n");
printf("2、输出学生信息\n");
printf("3、按学号查找学生信息\n");
printf("4、查找指定位置学生信息\n");
printf("5、插入学生信息\n");
printf("6、删除学生信息\n");
printf("7、输出学生总人数\n");
printf("8、退出\n");
while(1)
{
printf("请选择要操作的序号(1—8):\n");
int n;
scanf("%d",&n);
switch(n)
{
case 1:creatlist(l);break;
case 2:show(l);break;
case 3:search1(l);break;
case 4:search2(l);break;
case 5:add(l);break;
case 6:dele(l);break;
case 7:printf("共有学生%d人\n",l->length);break;
        case 8:exit(0);
}
}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值