p->date =p->next ->date是什么意思
时间: 2023-12-25 18:03:52 浏览: 63
这段代码是在C语言中使用的,它的意思是将指针p所指向的节点的日期(date)赋值为指针p的下一个节点的日期(next->date)。简单来说,p->date表示访问指针p所指向节点的日期,而p->next->date表示访问指针p的下一个节点的日期。这种语法通常用于链表数据结构中,用于操作链表节点的属性。
相关问题
bool ff(int number,int size)//首次适应算法 { pNod temp= new Free_Node; Free_Node *p=headNode->next; //从首节点开始 temp->date.number=number; temp->date.size=size; temp->date.flag=BUSY; while(p) { if (p->date.flag==FREE && p->date.size == size )//请求大小刚好满足 { p->date.flag=BUSY; p->date.number=number; return true; } if (p->date.flag==FREE && p->date.size>size)//说明还有其他的空闲区间 { temp->next=p; temp->prior=p->prior; temp->date.begin_address=p->date.begin_address; p->prior->next=temp; p->prior=temp; p->date.begin_address=temp->date.begin_address+temp->date.size;//空闲分区开始地址+此次分配的空间 p->date.size-=size; //分配空闲作业 return true; } p=p->next; } return false; }改为最差适应算法
将该函数改为最差适应算法的代码如下所示:
```
bool wf(int number, int size) {
Free_Node* temp = new Free_Node;
Free_Node* p = headNode->next;
Free_Node* worst_node = nullptr; // 最差适应算法需要记录最大空闲区间
int max_size = -1; // 最差适应算法需要记录最大空闲区间的大小
temp->date.number = number;
temp->date.size = size;
temp->date.flag = BUSY;
while (p) {
if (p->date.flag == FREE && p->date.size >= size) { // 如果空闲区间大小满足要求
if (p->date.size > max_size) { // 找到更大的空闲区间
max_size = p->date.size;
worst_node = p;
}
}
p = p->next;
}
if (worst_node) { // 找到了空闲区间
temp->next = worst_node;
temp->prior = worst_node->prior;
temp->date.begin_address = worst_node->date.begin_address;
worst_node->prior->next = temp;
worst_node->prior = temp;
worst_node->date.begin_address = temp->date.begin_address + temp->date.size;
worst_node->date.size -= size;
worst_node->date.flag = FREE;
return true;
}
return false;
}
```
需要注意的是,最差适应算法需要记录最大空闲区间,因此在遍历空闲区间时需要记录当前的最大空闲区间。
typedef struct vip { vip date; struct Lnode *next; }Lnode,*linklist; Lnode *createlink() { Lnode *head =(Lnode*)malloc(sizeof(Lnode)); Lnode *p = head; int t; FILE * r= fopen("input.txt","r"); if(r==NULL) { printf("打开文件失败!"); return NULL; } while(fscanf(r,"%d",&t)!=EOF) { Londe *q= (Lnode*)malloc(sizeof(Lnode)); q->data=t; p->next=q; p=q; } p->next=NULL; fclose(r); return head; } linklist scanflist() { linklist L; L=(linklist)malloc(sizeof(Lnode)); L->next=NULL; linklist p;int n,i; printf("请输入会员的数量:"); scanf("%d",&n); for(i=0;i<n;i++) { p=(linklist)malloc(sizeof(Lnode)); //创建一个新结点*P printf("请输入会员信息:\n"); printf("身份证号:"); scanf("%s",p->date.sfz); printf("姓名:"); scanf("%s",p->date.xm); //字符串输入 printf("电话:"); scanf("%s",p->date.dh); printf("会员等级:"); scanf("%s",p->date.hydj); printf("优惠政策:"); scanf("%s",p->date.yhzc); p->next=L->next; //使p插入头结点 L->next=p; } return L; //返回链表的头指针 L。 }我这个问题出在哪
你的代码中有一些错误:
1. 在结构体定义中,`vip`应该是结构体名,不应该出现在结构体内部。
2. 在函数`createlink()`中,`Londe`应该是`Lnode`的拼写错误。
3. 在函数`scanflist()`中,结构体`vip`的成员变量没有定义,应该在结构体定义中添加相应的成员变量。
下面是修改后的代码:
```c
typedef struct vip {
char sfz[20]; // 身份证号
char xm[10]; // 姓名
char dh[20]; // 电话
char hydj[10]; // 会员等级
char yhzc[20]; // 优惠政策
} Vip;
typedef struct Lnode {
Vip data;
struct Lnode *next;
} Lnode, *LinkList;
LinkList createlink() {
LinkList head = (LinkList)malloc(sizeof(Lnode));
Lnode *p = head;
int t;
FILE *r = fopen("input.txt", "r");
if (r == NULL) {
printf("打开文件失败!");
return NULL;
}
while (fscanf(r, "%d", &t) != EOF) {
Lnode *q = (Lnode*)malloc(sizeof(Lnode));
q->data = t;
p->next = q;
p = q;
}
p->next = NULL;
fclose(r);
return head;
}
LinkList scanflist() {
LinkList L;
L = (LinkList)malloc(sizeof(Lnode));
L->next = NULL;
LinkList p;
int n, i;
printf("请输入会员的数量:");
scanf("%d", &n);
for (i = 0; i < n; i++) {
p = (LinkList)malloc(sizeof(Lnode)); //创建一个新结点*P
printf("请输入会员信息:\n");
printf("身份证号:");
scanf("%s", p->data.sfz);
printf("姓名:");
scanf("%s", p->data.xm); //字符串输入
printf("电话:");
scanf("%s", p->data.dh);
printf("会员等级:");
scanf("%s", p->data.hydj);
printf("优惠政策:");
scanf("%s", p->data.yhzc);
p->next = L->next; //使p插入头结点
L->next = p;
}
return L; //返回链表的头指针 L。
}
```
注意,以上代码只是解决了语法错误,具体是否符合你的需求还需要你自己仔细检查。