[原创]请教关于c语言的问题
#include <stdio.h>#define OK 1
#define ERROR 0
#define NULL 0
#define FootLoc(p)p+p->size-1
typedef struct word
{
union
{
word *llink;
word *uplink;
};
int tag;
int size;
word *rlink;
}word,head,foot,*space;
space allocboundtag(word *L,space *pav,int n,int e)
{//
word *p;
word *f;
char c;
for(p=*pav;p&&p->size<n&&p->rlink!=*pav;p=p->rlink)//查找不小于n的空闲块
if(!p||p->size<n) return NULL;//找不到,返回空指针
else
{//P指向找到的空闲块
f=FootLoc(p);//指向底部
*pav=p->rlink;//pav指向*p结点的后继结点
if(p->size-n<=e)
{//整块分配,不保留<=e的量
if(*pav==p)pav=NULL;//可利用空间为空表
else
{//在表中删除分配的结点
pav->llink=p->llink;
p->llink->rlink=*pav;
}
p->tag=f->tag=1;//修改分配结点的头部和底部标志
}
else
{//分配该块的后n个字
f->tag=1;//修改分配块的底部标志
p->size-=n;//置块大小
f=FootLoc(p);//指向块底部
f->tag=0;f->uplink=p;//设置块底部
p=f+1;//指向分配块头部
p->tag=1;p->size=n;//设置分配块头部
}
return p;//返回分配块首地址
}
}
void free(word *L,space *pav,int n)
{
word *p;
word *q;
word *f;
p->tag=0;
f->uplink=p;
f->tag=0;
if(!pav) *pav=p->llink=p->rlink=p;
else
{
q=pav->llink;
p->rlink=*pav;
p->llink=q;
q->rlink=pav->llink=p;
*pav=p;
}
}
这个程序有什么问题呢? 呢个问题,可唔可以先把你要实现的功能说一说,这样看程序真的很痛苦,虽然你有写注释。 我想通过它来调整内存的存储空间 不明。。。呵呵。 我也不知道怎么说。或者说是改变结构数组的存储空间的分布吧。 厉害,这都想得出来 main()呢?
页:
[1]