结构体数组
来源:互联网 发布:网络推广维护 编辑:程序博客网 时间:2024/06/03 13:01
结构体数组
结构体数组相对于顺序表的优势在于可以用每个结点存储每个个体的信息,相对于链表的优势在于操作简便;结构体数组的劣势在于插入、删除操作占用资源过多,并且有时候无法分配足够的连续空间。
结构体数组的实现及操作
以学生信息管理为例
类型定义
#define LIST_LEN 1000typedef struct{ char num[10]; //学号 char name[10]; //姓名 int rank; //名次}Student;Student SaList[LIST_LEN];
结构体数组的查找、插入、删除、排序
#include <stdio.h>#include <stdlib.h>#define LIST_LEN 1000typedef struct{ char num[10]; //学号 char name[10]; //姓名 int rank; //名次}Student;Student SaList[LIST_LEN];void print_Sa(Student* L, int n);int cmp(const void *a ,const void *b);int Locate_Sa(Student* L, int n, char* num);void Insert_Sa(Student* L, int n, int locate);void Delet_Sa(Student* L, int n, int locate);int main(void){ int i,j,k,n; printf("请输入学生人数: "); scanf("%d",&n); getchar(); //学生信息的录入 printf("请录入学生信息:\n"); for(i = 0; i < n; i++){ printf("\n第%d个学生:\n",i+1); printf("学号: "); gets(SaList[i].num); printf("姓名: "); gets(SaList[i].name); printf("名次: "); scanf("%d",&SaList[i].rank); getchar(); } printf("\n--------------------------\n按名次排序为:\n"); //按学生的名次升序排序 qsort(SaList, n, sizeof(SaList[0]), cmp); print_Sa(SaList,n); //根据学号查找学生,并返回序号 printf("\n--------------------------\n请输入要查找的学生的学号: "); char findnum[10]; int locate; gets(findnum); locate = Locate_Sa(SaList, n, findnum); printf("学号为%s的学生的序号为%d\n", findnum, locate); //在某个学生前插入一个学生的信息 printf("\n--------------------------\n请输入在哪个学生前插入(输入学号): "); gets(findnum); locate = Locate_Sa(SaList, n, findnum); Insert_Sa(SaList, n, locate); n++; printf("\n--------------------------\n现在列表数据为:\n"); print_Sa(SaList, n); //删除某个学生的信息 printf("\n--------------------------\n请输入要删除的学生的学号: "); gets(findnum); locate = Locate_Sa(SaList, n, findnum); Delet_Sa(SaList, n, locate); n--; printf("\n--------------------------\n现在列表数据为:\n"); print_Sa(SaList, n); return 0;}int Locate_Sa(Student* L, int n, char* num){ int i; for(i = 0; i < n; i++) if(!strcmp(num, L[i].num)) return ++i;}void Insert_Sa(Student* L, int n, int locate){ int i; char num[10],name[10]; int rank; for(i = n-1; i >= locate-1; i--) L[i+1] = L[i]; printf("请输入要插入学生的学号:"); gets(num); printf("请输入要插入学生的姓名:"); gets(name); printf("请输入要插入学生的名次:"); scanf("%d",&rank); getchar(); strcpy(L[locate-1].num, num); strcpy(L[locate-1].name, name); L[locate-1].rank = rank;}void Delet_Sa(Student* L, int n, int locate){ int i; for(i = locate; i < n; i++) L[i-1] = L[i];}int cmp( const void *a ,const void *b){ return (*(Student *)a).rank > (*(Student *)b).rank ? 1 : -1;}void print_Sa(Student* L, int n){ int i; for(i = 0; i < n; i++){ printf("学号: "); puts(L[i].num); printf("姓名: "); puts(L[i].name); printf("名次: "); printf("%d\n\n",L[i].rank); }}
运行结果
阅读全文
1 0
- 数组--结构体数组
- 结构体、结构体数组
- 结构体数组使用方法
- 结构体数组
- 结构体数组
- 数组与结构体
- 结构体数组指针
- 结构体数组格式
- 结构体数组
- 结构体,数组
- 结构体数组
- 结构体数组排序
- 结构体数组用法
- 结构体数组
- 结构体计算数组
- 结构体数组的
- 结构体数组计算
- 结构体数组初始化
- Gradle和Maven对比
- redis 基本类型
- Spring Web Flow 简介
- 科普一下淘宝刷单那些事
- dujiao模板
- 结构体数组
- 微信小程序学习用demo推荐:列表项左滑删除效果
- 算法设计周记(一)--大数加法
- 线程之间的通信
- 【LeetCode】345. Reverse Vowels of a String
- LeetCode 657. Judge Route Circle (Easy)
- JDBC批处理addBatch
- 小白之matlab c++混合编程
- 如何调整CodeIgniter的报错级别