鱼C论坛

 找回密码
 立即注册
查看: 1351|回复: 5

课后作业内存池,因为作业没有更新,在下面评论里有鱼油发了份没有内存池的代码。

[复制链接]
发表于 2019-8-12 15:22:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
没加内存池版本:
#include<stdio.h>
#include<stdlib.h>

struct Lin
{
        char name[30];
        char number[20];
        struct Lin *next;
} *han = NULL;


void ching(struct Lin *hand);
int recu(int i, struct Lin rea, char a[]);
void addperson(struct Lin **hand);
void findperson(struct Lin *hand);
void chingperson(struct Lin *hand);
void delperson(struct Lin **hand);
void displaycontacs(struct Lin *hand);
void freeper(struct Lin **hand);

int main(void)
{
        int num = 0;
        while (num != 6)
        {
                putchar('\n');
                printf("请输入命令:\n.....||1(添加新的联系人)  ||.....\n.....||2:(查找联系人)    ||.....\n.....||3:(更改联系人)    ||.....\n.....||4:(删除联系人)    ||.....\n.....||5:(查看所有联系人)||.....\n.....||6:(退出)          ||.....");
                scanf_s("%d", &num);
                switch (num)
                {
                case 1: addperson(&han); break;
                case 2: findperson(han); break;
                case 3: chingperson(han); break;
                case 4: delperson(&han); break;
                case 5: displaycontacs(han); break;
                }
        }
        freeper(&han);
}




void ching( struct Lin *hand)
{
        int num;
        while (1)
        {
                printf("输入1,改写名字\n输入2,改写号码\n输入-1,退出改写程序");
                scanf_s("%d", &num);
                switch (num)
                {
                case 1: printf("请输入名字:"); scanf_s("%s", hand->name, 30);
                case 2: printf("请输入号码:"); scanf_s("%s", hand->number, 20);
                default:printf("输入错误,请重新输入:");
                case -1: break;
                }
        }
}

int recu(int i, struct Lin rea, char a[])
{
        int z;
        do
        {
                z = a[i] - rea.name[i];
                i++;
                if (z)
                {
                        break;
                }
               
        } while(rea.name[i] != '\0');

        if (rea.name[i] != '\0')
        {
                return -1;
        }
        return 0;
}

void addperson(struct Lin ** hand)
{
        struct Lin *adper;

        adper = (struct Lin *)malloc(sizeof(struct Lin));
        if (adper == NULL)
        {
                printf("分配内存失败!");
                exit(1);
        }

        printf("请输入联系人的名字\n:");

        scanf_s("%s", adper->name,30);

        printf("请输入电话号码\n");

        scanf_s("%s", adper->number,20);


        if (*hand == NULL)
        {
                *hand = adper;
                adper->next = NULL;
        }
        else
        {
                adper->next = *hand;
                *hand = adper;
        }
}


void findperson(struct Lin * hand)
{
        int num;
        char a[30];
        printf("请输入名字:\n");
        scanf_s("%s", a, 30);
        while(1)
        {
                num = recu(0, *hand, a);
                if (num == 0)
                {
                        break;
                }
                hand = hand->next;
                if (hand == NULL)
                {
                        printf("抱歉,本通讯录没有此人\n");
                        break;
                }
        }
        if (hand != NULL)
        {
                printf("你要找的%s的电话号码是%s\n", hand->name, hand->number);
        }
}

void chingperson(struct Lin * hand)
{
        int num;
        char a[30];
        printf("请输入名字:");
        scanf_s("%s", a, 30);
        while (1)
        {
                num = recu(0, *hand, a);
                if (num == 0)
                {
                        break;
                }
                hand = hand->next;
                if (hand == NULL)
                {
                        printf("抱歉,本通讯录没有此人\n");
                        break;
                }
        }
        if (hand != NULL)
        {
                ching(hand);
        }
        printf("请确认:");
        printf("姓名:%s",hand->name);
        printf("号码:%s\n",hand->number);
}

void delperson(struct Lin ** hand)
{
        int num;
        struct Lin *chin;
        chin = *hand;
        struct Lin *nx;
        nx = NULL;
        char a[30];
        printf("请输入名字:\n");
        scanf_s("%s", a, 30);
        while (1)
        {
                num = recu(0, *chin, a);
                if (num == 0)
                {
                        break;
                }
                nx = chin;
                chin = chin->next;
                if (hand == NULL)
                {
                        printf("抱歉,本通讯录没有此人\n");
                        break;
                }
        }
        if (chin == *hand)
        {
                *hand = chin->next;
                free(chin);
        }
        else
        {
                nx->next = chin->next;
                free(chin);
        }
}

void displaycontacs(struct Lin * hand)
{
        printf("开始打印全部成分:\n");
        while (hand != NULL)
        {
                printf("联系人:%s\n", hand->name);
                printf("电话:%s\n", hand->number);
                printf("====================================");
                putchar('\n');
                hand = hand->next;
        }
        printf("打印结束\n");
}

void freeper(struct Lin ** hand)
{
        struct Lin *h;
        struct Lin *n;
        h = *hand;
        *hand = NULL;
        while (h != NULL)
        {
                n = h->next;
                free(h);
                h = n;
        }
        exit(1);
}
在Linux上编译,代码对着了,但错误有很多,我想着可能忘加什么头文件或函数?
请大家帮忙看一下。
2019-08-12.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-12 15:24:46 | 显示全部楼层

回帖奖励 +1 鱼币

什么是内存池?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-12 16:00:07 From FishC Mobile | 显示全部楼层
zltzlt 发表于 2019-8-12 15:24
什么是内存池?

就是让程序额外维护一个缓存区域,当一块内存将要释放的时候,并不直接调用free函数将其释放,而是将它存放到设计好的内存池中。下次用时直接从内存池中获取直接使用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-8-20 20:59:06 | 显示全部楼层
咳咳,这块还在学,先插眼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-20 21:59:48 | 显示全部楼层
隔壁繁星吖 发表于 2019-8-20 20:59
咳咳,这块还在学,先插眼

我买了那个小甲鱼出的书,那书上有正确的代码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-3 15:57:45 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 13:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表