文章目录
先来复习C中的知识
结构体指针,动态内存
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct Data{
int* arr;
int n;
}Data;
void PrintData(const Data* data){
// 结构体指针
for(int i=0;i<data->n;++i){
printf("%d ",data->arr[i]);
}
printf("\n");
}
int main(){
int arr[] = {
1,2,3,4,5};
Data data = {
arr,sizeof(arr)/sizeof(arr[0])};
printf("%p\n",data.arr);
printf("%d\n",data.n);
PrintData(&data);
data.n = 0;
data.arr = NULL;
while(true){
int num;
int res = scanf("%d",&num);
if(EOF == res) break;
data.arr = realloc(data.arr,(data.n+1)*sizeof(int));
data.arr[data.n] = num;
data.n++;
}
PrintData(&data);
free(data.arr);
data.arr = NULL;
data.n = 0;
}
结果为:
0x7fff54d33c20
5
1 2 3 4 5
3 2 5 1 4
3 2 5 1 4
结合之前的知识,添加数据,查看数据删除数据
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct Data{
int* arr;
int n;
}Data;
//添加数据
void AppendData(Data* data,int num){
data->arr = realloc(data->arr,(data->n+1)*sizeof(int)); // 加了一个数
data->arr[data->n] = num; //更改了指针指向的数据
data->n++;
}
//查找数据
int SearchData(Data* data,int num){
for(int i=0;i<data->n;++i){
if(num == data->arr[i]){
return i;
}
}
return -1;
}
//删除数据
void DeleteData(Data* data,int index){
for(int i=index;i<data->n-1;++i){
data->arr[i] = data->arr[i+1]; //更改了指针指向的数据
}
data->n--;
data->arr = realloc(data->arr,data->n*sizeof(int)); // 少了一个数
}
//打印数据
void PrintData(const Data* data){
for(int i=0;i<data->n;++i){
printf("%d ",data->arr[i]);
}
printf("\n");
}
//显示数据过程
void ShowDataInfo(Data* data){
PrintData(data);
}
//添加数据过程
void AddDataInfo(Data* data){
printf("请输入数字:");
int num;
scanf("%d",&num);
AppendData(data,num); //传原data和新输入的数字
}
//删除数据过程
void DelDataInfo(Data* data){
printf("请输入要删除的数字:");
int num;
scanf("%d",&num);
int index = SearchData(data,num); //返回下标或-1
if(-1 == index){
printf("没有要删除的数字\n");
}else{
DeleteData(data,index); //删除操作
printf("%d已成功删除\n",num);
}
}
int main(){
Data data = {
NULL,0}; //初始化
const char* items[] = {
// 字符串数组
"查看数据",
"添加数据",
"删除数据",
};
typedef void(*func_t)(Data* data); //定义函数指针数组
func_t funcs[] = {
ShowDataInfo,AddDataInfo,DelDataInfo};
while(true){
printf("选项:\n");
for(int i=0;i<3;++i){
printf("%d.%s\n",i+1,items[i]);
}
printf("0.退出\n");
printf("请输入选项:");
int selected;
scanf("%d",&selected);
if(0==selected) break;
if(selected<0 || selected>3){
printf("选项输入错误!\n");
continue;
}
funcs[selected-1