C语言中关于结构、链表的问题?
#include<stdio.h>#include<stdlib.h>structnode{intdata;structnode*next;}*head,*a;intma...
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node *next;
}*head,*a;
int main()
{
int m, n, i;
scanf("%d %d",&n,&m);
head = new node;
head->next=NULL;
head->data=1;
a = head;
for(i = 2; i <= n; i++)
{
node *b = new node;
b->data = i;
b->next = NULL;
a->next = b;
a = b; //这里a等于b?还是b赋值给a?
}
a->next=head;
node *q = head;
i = 0;
while(q->next!=q)
{
i++;
if(i==m-1)
{
node *p = q->next;
q->next = q->next->next; // q->next 等于q->next->next?还是q->next->next赋值给q->next??
delete(p);
i = 0;
q=q->next;
}
else
{
q=q->next;
}
}
printf("%d\n",q->data);
return 0;
}
疑问:
1、在这道题中,自认为结构a、b结构示意图画法。大侠能不能把p、q在整个链表中流通的过程说明一下吗?
2、对于题中提到的 “a=b”与 “q->next = q->next->next”。它们之间是“相等”关系还是“赋值”关系? 展开
#include <stdlib.h>
struct node
{
int data;
struct node *next;
}*head,*a;
int main()
{
int m, n, i;
scanf("%d %d",&n,&m);
head = new node;
head->next=NULL;
head->data=1;
a = head;
for(i = 2; i <= n; i++)
{
node *b = new node;
b->data = i;
b->next = NULL;
a->next = b;
a = b; //这里a等于b?还是b赋值给a?
}
a->next=head;
node *q = head;
i = 0;
while(q->next!=q)
{
i++;
if(i==m-1)
{
node *p = q->next;
q->next = q->next->next; // q->next 等于q->next->next?还是q->next->next赋值给q->next??
delete(p);
i = 0;
q=q->next;
}
else
{
q=q->next;
}
}
printf("%d\n",q->data);
return 0;
}
疑问:
1、在这道题中,自认为结构a、b结构示意图画法。大侠能不能把p、q在整个链表中流通的过程说明一下吗?
2、对于题中提到的 “a=b”与 “q->next = q->next->next”。它们之间是“相等”关系还是“赋值”关系? 展开
2个回答
展开全部
你这个示意图不对,这个程序的功能是:首先,建立一个单循环链表,长度为n,里面的值分别为1,2,3,4,...一直到n。然后,对这个循环链表中第m-1个元素进行删除。示意图画起来太费事 了,有什么不懂,再问吧。
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node *next;
}*head,*a;
int main()
{
int m, n, i;
scanf("%d %d",&n,&m);
head = new node;
head->next=NULL;
head->data=1;
a = head;
for(i = 2; i <= n; i++)
{
node *b = new node;
b->data = i;
b->next = NULL;
a->next = b;
a = b; //这里a等于b?还是b赋值给a? 解释:这里的“=”是赋值,把 b //的值赋给a(b和a里存的都是地址值),C语言 中等于的符号是:==
}
a->next=head;
node *q = head;
i = 0;
while(q->next!=q)
{
i++;
if(i==m-1)
{
node *p = q->next;
q->next = q->next->next; // q->next 等于q->next->next?还是q->next->next赋值给 //q->next?? 解释:这和上面一个问题,不回答了。
delete(p);
i = 0;
q=q->next;
}
else
{
q=q->next;
}
}
printf("%d\n",q->data);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node *next;
}*head,*a;
int main()
{
int m, n, i;
scanf("%d %d",&n,&m);
head = new node;
head->next=NULL;
head->data=1;
a = head;
for(i = 2; i <= n; i++)
{
node *b = new node;
b->data = i;
b->next = NULL;
a->next = b;
a = b; //这里a等于b?还是b赋值给a? 解释:这里的“=”是赋值,把 b //的值赋给a(b和a里存的都是地址值),C语言 中等于的符号是:==
}
a->next=head;
node *q = head;
i = 0;
while(q->next!=q)
{
i++;
if(i==m-1)
{
node *p = q->next;
q->next = q->next->next; // q->next 等于q->next->next?还是q->next->next赋值给 //q->next?? 解释:这和上面一个问题,不回答了。
delete(p);
i = 0;
q=q->next;
}
else
{
q=q->next;
}
}
printf("%d\n",q->data);
return 0;
}
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询