C的结构数组问题

来源:百度知道 编辑:UC知道 时间:2024/05/22 18:18:28
struct node
{
int data;
struct node *next;
}
*p,*q,*r;
p q r依次连成链表;
现在可以将q所指的节点从链表中删除,同时保持链表的连续,下列不能完成指定操作的语句是
A.P->next=q->next;
B.p->next=p->next->next;
C.p->next=r;
D.p=q->exit;
A C我知道是对的 B是错的吧 不能这么引用吧 D还能保持链表的连续吗?
结构体名到底是指针还是什么?
到底是struct node *p,x;
p=x;
还是p=&x;
谢谢大侠
很感谢大家 分只能给一个 按先后给吧

b是正确的,可以这么使用
d是不正确的,因为d的意思是p直接指向了q->next即指向r了,那p和r就变成了一个元素,即链表中只剩下r存在了

结构体名 需要全部写上,就是struct node,你也可以这样
typedef struct node NODE
这样以后你用NODE就是struct node了,不过注意的是,struct node定义时候大括号中的struct node *next;不能用成NODE *next;

最后一个问题,应该是p=&x吧
因为p是指针,怎么可能和一个普通变量直接用=号赋值那

还有就是你问“结构体名到底是指针还是什么?”,我是这样理解的,因为你用的是链表,所以需要很强的灵活性,所以要使用指针,而且你看你在这个结构体内部定义的next也是个指针,所以为了连接链表的时候有p->next = q成立,这里使用的也应该是指针啊
,一般情况下结构体当然也可以像普通的变量一样去定义去使用,这个结构体的变量应该是属于面向对象思想里面的类,建议你看一看面向对象相关的知识
还有就是如果不是用指针的话,比如说你是写的struct node p;那么用到data的时候应该是用。
即p。data,而不是p->data了
头一次打这么多字啊
纯原创。。。累啊。。。
希望没把你绕糊涂

B是对的啊
p->next 这不也是一个struct node*么 它的值就是q~

D显然是错的 把r赋给p 莫名其妙

如下图所示,三个数据结构:

Node1 Node2 Node3
| Data1, Next1 | -> | Data2, Next2 | -> | Data3, Next3 | ->

^ ^ ^
| |