慕尼黑0001808 的学生作业:
//写出下列类型的判空,删除
#ifndef __LIST_H__
#define __LIST_H__
#include
#include
#include
#define MAX 10
//实际学生的存储
struct student
{
char name[20];
int id;
int age;
};
typedef struct student datatype_t;
typedef struct{
datatype_t buf[MAX]; //定义数组记录班级学⽣每个学⽣的信息。
int n; //学⽣实际到来的个数。
}seqlist_t;
extern seqlist_t *create_empty_seqlist();
extern void printf_data_seqlist(seqlist_t * l);
extern int is_empty_seqlist(seqlist_t *l);
extern int delete_data_seqlist(seqlist_t *l,datatype_t data);
#endif
// list.c
#include "list.h"
//创建空的顺序表
seqlist_t *create_empty_seqlist()
{
seqlist_t * l = (seqlist_t *)malloc(sizeof(seqlist_t));
if (NULL == l)
{
printf("malloc seqlist_t fail \n");
return NULL;
}
return l;
}
// 打印数据
void printf_data_seqlist(seqlist_t * l)
{
printf("id\tname\tage\n");
for(int i = 0;in;i++)
{
printf("%d\t%s\t%d\n",l->buf[i].id,l->buf[i].name,l->buf[i].age);
}
printf("\n");
}
//判断顺序表是否为空
int is_empty_seqlist(seqlist_t *l)
{
return l->n==0?1:0;
}
//删除顺序表中指定的数据
int delete_data_seqlist(seqlist_t *l,datatype_t data)
{
int i = 0,j = 0;
if(is_empty_seqlist(l))
{
return -1;
}
for(;in;i++)
{
// 如果当前元素与要删除的元素不匹配,则保留它
if(!(strcmp(l->buf[i].name,data.name)==0&&l->buf[i].id==data.id&&l->buf[i].age==data.age))
{
l->buf[j++] = l->buf[i];
}
// 如果匹配(是要删除的元素),则跳过它,不增加j
}
// 检查是否删除了元素
if(i==j)
{
// 没有找到要删除的元素
return -2;
}
l->n = j;
return 0;
}
// main.c
#include "list.h"
int main()
{
seqlist_t * l = create_empty_seqlist();
datatype_t data[10] = {
{"Alice", 1001, 18}, {"Bob", 1002, 19}, {"Charlie", 1003, 20},
{"David", 1004, 21}, {"Eve", 1005, 19}, {"Frank", 1006, 22},
{"Grace", 1007, 20}, {"Helen", 1008, 23}, {"Ivy", 1009, 21},
{"Jack", 1010, 20}
};
memcpy(l->buf,data,sizeof(data));
l->n = 10;
printf("删除前:\n");
printf_data_seqlist(l);
int result = delete_data_seqlist(l,data[1]); // 删除 Bob
printf("删除结果: %d\n", result);
printf("删除后:\n");
printf_data_seqlist(l);
free(l);
l = NULL;
return 0;
}