c语言用顺序表实现学生信息的添加、插入、删除、查找功能

#include<stdio.h>
#include<stdlib.h>
#include<string.h> 
#define MAX  20

typedef    struct{
        int   no;  //8位学号 
        char name[20];  //姓名
        float score;         //成绩 
}Student;
    
typedef    struct{
    Student *elem;  //指向数据元素的基地址 
    int length;     //线性表的当前长度 
}SqList;         

void InitList(SqList &L) //初始化 
{
   L.elem=(Student *)malloc(MAX*sizeof(Student));// 为顺序表分配一个大小为MAX的数组空间
   //L.elem= new Student[MAX];
   L.length=0;
   if(!L.elem)
   {
      printf("顺序表初始化失败"); //储存分配失败退出
   } else printf("顺序表初始化成功"); 
  

 /* void GetElem(SqList L,int i,Student &e)
{
    if (i<1 || i>L.length) 
    {
      printf("error");
    }
    e=L.elem[i-1];

}*/
void LocateElem (SqList &L,int i)  //对指定位置进行查找,并返回其信息 
{
        if(1<=i&&i<=L.length)
        {
                    printf("\t\t\t该同学的姓名是:%s\n",L.elem[i-1].name);
                    printf("\t\t\t该同学的学号是:%d\n",L.elem[i-1].no);
                    printf("\t\t\t该同学的成绩是:%f\n",L.elem[i-1].score);    
        }else printf("没有该同学"); 
        system("PAUSE");
        system("cls"); 
}
void FindElem(SqList &L,char e[])  //根据姓名进行查找,并返回此学生的学号和成绩 
{
    int l=0;
    for(int i=0;i<L.length;i++)
        {
          if(strcmp(L.elem[i].name,e)==0)    
            {
                    printf("\t\t\t该同学的学号是:%d,",L.elem[i].no);
                    printf("\n\t\t\t该同学的成绩是:%f.",L.elem[i].score);
                    l++;
            }
        }
        if(l==0)
        {
            printf("\t\t\t没有该同学信息");
        }
        system("PAUSE");
        system("cls"); 
}
void  ListInsert(SqList &L,int i)  //在顺序表L中第i个位置插入新的元素e,并判断插入范围是否合法 
{
    system("cls"); 
    if((i<1)||(i>L.length+1))
    {
        printf("\t\t\t输入的i不合法");
    }
        system("PAUSE");
        system("cls"); 
    if(L.length==MAX)
    { 
    printf("\t\t\t表已满,不可添加");
        system("PAUSE");
        system("cls"); 
    } 
    
      for(int j=L.length-1;j>=i-1;j--)    
    { 
        L.elem[j+1]=L.elem[j];
    }             //插入位置以及之后的元素后移 
    printf("请按依次输入您想要插入的学生信息的学号、姓名、成绩(用空格隔开):\t");
    scanf("%d%s%f",&L.elem[i-1].no,&L.elem[i-1].name,&L.elem[i-1].score);           //将新元素e放在第i个位置上 
    ++L.length;
    printf("插入学生信息成功\n"); 
    printf("请按任意键返回"); 
/*    system("PUASE");
    system("cls");*/

int  ListDelete(SqList &L,int i)  //在顺序表中删除第i个元素 
{
    if(i<1||i>L.length)
    {
        printf("\t\t\t您输入的i值不合法"); 
        system("PAUSE");
        system("cls");     
        return 0;
    }
    int j;
    j=i;    
        for(int j=i;j<=L.length-1;j++)
        {
            L.elem[j-1]=L.elem[j];
        }
    --L.length;
    printf("\t\t\t删除成功");
        system("PAUSE");
        system("cls");     
}

void InitSqList(SqList &L,int n)   // 传入初始化好的顺序表地址,以及要录入学生的人数 

     int m,i;
    printf("\t\t请按照顺序填写 学号 姓名 成绩\n");
    for(i=0;i<n;i++)
    {
         m=1;
        printf("\t\t请输入学第%d位学生的信息\n",i+1);    
        printf("学号:"); 
        while(m) 
        {
          scanf("%d",&L.elem[i].no);
          if(L.elem[i].no<0)
          {
              printf("您输入的数字不合法\n请重新输入第%d位学生的八位学号:",i+1);
          } else m=0; 
        }
        printf("姓名:");
        m++;
        while(m)
        {
         scanf("%s",&L.elem[i].name);
          if(L.elem[i].name<0)
          {
              printf("您输入的姓名不合法\n请重新输入第%d位学生的姓名:",i+1);
          } else m=0; 
        }
        printf("成绩:");
        m++; 
            while(m)
        {
         scanf("%f",&L.elem[i].score);
          if(L.elem[i].score<0)
          {
              printf("您输入的成绩不合法\n请重新输入第%d位学生的成绩:",i+1);
          } else m=0; 
        }
    } 
    L.length=n+L.length;
    printf("录入信息成功。"); 
    system("PAUSE"); //防止窗口关闭
    system("cls"); //清屏 
}
void OutSqList(SqList &L)
{
    system("cls");
    printf("\t\t下面是学生信息\n");
    printf("\t\t\t学号            姓名            成绩\n");
    for(int i=0;i<L.length;i++)
    {
        printf("\t\t\t%d",L.elem[i].no); 
        printf("\t\t\t%s",L.elem[i].name); 
        printf("\t\t\t%f",L.elem[i].score); 
        printf("\n");
    }
    printf("\t\t\t表中学生总人数为:%d\n",L.length);
    system("PAUSE");
    system("cls");

void Display()
{
    printf("\n\n");
    printf("\t\t◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇\n");
    printf("\t\t************************************************\n");
    printf("\t\t*******♂欢迎进入学生信息功能管理界面♀*******\n");
    printf("\t\t************************************************\n");
    printf("\t\t************************************************\n");
    printf("\t\t☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★\n");
    printf("\t\t→←→←→←1. 学生信息添加系统 →←→←→←→ \n");
    printf("\t\t☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★\n");
    printf("\t\t→←→←→←2.学生信息删除系统 →←→←→←→ \n");
    printf("\t\t☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★\n");
    printf("\t\t→←→←→←3.显示学生信息系统 →←→←→←→ \n");
    printf("\t\t☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★\n");
    printf("\t\t→←→←→←4.插入学生信息修改系统 →←→←→←→ \n");
    printf("\t\t☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★\n");
    printf("\t\t→←→←→←5.查找学生信息系统 →←→←→←→ \n");
    printf("\t\t€€ €€ €€ €€ €€ €€ €€ €€ €€ €€  \n");
    printf("\t\t◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇\n");        
    printf("\n\n");
//    printf("\t\t请输入所需功能的对应字母\n");
}

main()
{
   char xh[20];
   char xm[20];
   float cj; 
   int numb,n;
   SqList L;
   InitList(L);  //初始化顺序表 
   while(1)
    {
      Display();
      printf("\t\t请输入所需功能的对应数字\n");
      scanf("%d",&numb);
      switch (numb)
      {
          case 1: 
          system("cls");
          printf("请输入要录入学生的人数:"); 
          scanf("%d",&n);
          InitSqList(L,n);
          break;
        case 2:
                int m;
                system("cls");
                printf("请输入要删除的第几个位置的学生信息:"); 
                scanf("%d",&m);
                ListDelete(L,m);
                break;
        case 3:
                OutSqList(L); 
                break;
        case 4:
                int i;  
                printf("请输入要在第几个位置插入学生信息:"); 
                scanf("%d",&i);
                ListInsert(L,i);
                    system("PUASE");        
                    system("cls");
                break;
        case 5:
                int n,q;
                char e[20];
                system("cls");
                 printf("\t\t\t1.根据姓名进行查找\n");
                printf("\t\t\t2.对指定位置查找\n");
                printf("\t\t\t请输入需要进行查找的类型:");
                scanf("%d",&n);
                if(n==1)
                {
                    printf("\t\t\t请输入要查找的姓名:");
                    scanf("%s",&e);
                    FindElem(L,e); 
                } else 
                 {
                     printf("\t\t\t请输入要查找的学生序号:");
                     scanf("%d",&q);
                     LocateElem (L,q);
                         
                 }
          
      } 
    }    
}
 

  • 10
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
顺序表是一种常见的线性存储结构,可以用于实现顺序的插入删除查找等操作。以下是用C语言实现顺序表的示例代码: ```c #include <stdio.h> #define MAX_SIZE 100 typedef struct { int data[MAX_SIZE]; int length; } SeqList; //初始化顺序表 void initList(SeqList *list) { list->length = 0; } //插入元素 void insert(SeqList *list, int element, int position) { if (list->length >= MAX_SIZE) { printf("顺序表已满,无法插入新元素\n"); return; } if (position < 1 || position > list->length + 1) { printf("插入位置错误\n"); return; } for (int i = list->length; i >= position; i--) { list->data[i] = list->data[i-1]; //后移元素 } list->data[position-1] = element; list->length++; } //删除元素 void removeElement(SeqList *list, int position) { if (position < 1 || position > list->length) { printf("删除位置错误\n"); return; } for (int i = position; i < list->length; i++) { list->data[i-1] = list->data[i]; //前移元素 } list->length--; } //查找元素 int search(SeqList *list, int element) { for (int i = 0; i < list->length; i++) { if (list->data[i] == element) { return i+1; //返回元素位置 } } return -1; //未找到返回-1 } int main() { SeqList list; initList(&list); insert(&list, 1, 1); insert(&list, 2, 2); insert(&list, 3, 3); removeElement(&list, 2); int position = search(&list, 3); printf("元素3在位置%d\n", position); return 0; } ``` 以上代码实现顺序表的初始化、插入删除查找等基本操作。可以根据需要修改代码的MAX_SIZE来改变顺序表的最大长度。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值