如何用C语言双向循环链表实现malloc()和free()功能?

Learning_jiang 2012-11-14 02:01:47
如何用C语言指针,循环链表,实现内存管理,与malloc()和free()的功能相同。
...全文
259 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Learning_jiang 2012-11-15
  • 打赏
  • 举报
回复
没明白,请详细的写出代码并解释一下吧。谢谢!
JiMoKuangXiangQu 2012-11-14
  • 打赏
  • 举报
回复
读一读<<c语言接口与实现>>.
转角天边 2012-11-14
  • 打赏
  • 举报
回复
参考下内存池的实现方法
samqsu_amba 2012-11-14
  • 打赏
  • 举报
回复
大概这样: 先定义好需要内存大小LEN,分配一个内存池buf[LEN], 定义分配的最小单位n KB,这样就算出总共可分配的单元数m=LEN/n,把每个单元当作一个链表节点建立链表。 malloc时注意内存连续性,找到一段大小合适的连续的节点,各节点做个标记,返回起始地址。 free时,把标志去掉。
漫步者、 2012-11-14
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <malloc.h>
#define N 10

typedef struct node
{
 char name[20];
 struct node *llink,*rlink;
}stud;

stud * creat(int n)
{
 stud *p,*h,*s;
 int i;
 if((h=(stud *)malloc(sizeof(stud)))==NULL)
 {
  printf("不能分配内存空间!");
  exit(0);
 }
 h->name[0]=’\0’;
 h->llink=NULL;
 h->rlink=NULL;
 p=h;
 for(i=0;i<n;i++)
 {
  if((s= (stud *) malloc(sizeof(stud)))==NULL)
  {
   printf("不能分配内存空间!");
   exit(0);
  }
  p->rlink=s;
  printf("请输入第%d个人的姓名",i+1);
  scanf("%s",s->name);
  s->llink=p;
  s->rlink=NULL;
  p=s;
 }
 h->llink=s;
 p->rlink=h;
 return(h);
}

stud * search(stud *h,char *x)
{
 stud *p;
 char *y;
 p=h->rlink;
 while(p!=h)
 {
  y=p->name;
  if(strcmp(y,x)==0)
   return(p);
  else p=p->rlink;
 }
 printf("没有查找到该数据!");
}

void print(stud *h)
{
 int n;
 stud *p;
 p=h->rlink;
 printf("数据信息为:\n");
 while(p!=h)
 {
  printf("%s ",&*(p->name));
  p=p->rlink;
 }
 printf("\n");
}

main()
{
 int number;
 char studname[20];
 stud *head,*searchpoint;
 number=N;
 clrscr();
 head=creat(number);
 print(head);
 printf("请输入你要查找的人的姓名:");
 scanf("%s",studname);
 searchpoint=search(head,studname);
 printf("你所要查找的人的姓名是:%s",*&searchpoint->name);
}
//例子
Learning_jiang 2012-11-14
  • 打赏
  • 举报
回复
求精!!! 何用C语言指针,循环链表,实现内存管理,与malloc()和free()的功能相同。

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧