数据结构单链表的 p->next 跟p->data分别表示什么意思
-> 左边是结构体指针,右边是结构体成员,因此p->next 的含义是p指针指向结构体变量的next数据域。
例:
typedef struct{
int data;
struct Lnode *next;
}Lnode,*LinkList;
Lnode a; 结构体变量,用a.data、a.next
LinkList s;结构体指针,用s->data、s->next
扩展资料
p->next定义
struct Data
{
int a,b,c;
}; /*定义结构体*/
struct Data * p;/*定义结构体指针*/
struct Data A = {1,2,3};/*声明变量A*/
int x;/*声明一个变量x*/
p = &A ; /*让p指向A*/
x = p->a;/*这句话的意思就是取出p所指向的结构体中包含的数据项a赋值给x*/
/*由于此时p指向A,因而 p->a == A.a,也就是1*/
对于一开始的问题 p = p->next;这应该出现在C语言的链表,这里的next应该是一个与p同类型的结构体指针,其定义格式应该是:
struct Data
{
int a;
struct Data * next;
};/*定义结构体*/
main()
{
struct Data * p;/*声明指针变量p*/
p = p->next;/*将next中的值赋给p*/
}
L在数据结构中一般是作为链表头节点的指针,p=L,将P指针也指向头节点。
L->next有两层含义,可以表示L的后继节点指针,又可表示L的指针域,(补充:链表每个节点分为数据域和指针域,(单链表的指针域只有后继指针域,双链表的指针域分为前趋指针域和后继指针域))。第一,当它在等号右边时(即X = L->next形式)一般是指将X指针指向头节点L的后一个节点也就是链表的第一个数据节点;第二,当它在等号左边的时候(即L->next = X),表示将X的值当做地址,写入到L的后继指针域L->next当中,相当于头节点L的后面链接一个数据节点。基础概念理解后,对于p->next=s与p->next=s->next就好理解了,p->next=s:将指针变量s的值写入p的后继指针域,相当于p数据节点后又链接一个指针s指向数据节点,p->next=s->next:将s节点后接的节点的地址写入到p节点的后继指针域,相当于p节点后接s的后接节点。中间逻辑建议画图理一遍,理顺了以后再见到就能很快看明白的。
链表的节点包含两个要素:
数据域:要存储的数据,可以是多数据,当然您说的p->data是一个数据
指针域:指向下一个节点的地址,无下一个节点的话一定要为NULL;
戏贪硫酸: 说清楚你这个单链表的结点是如何定义的, *和-> 两运算符的优先级是->大于* 因此等号右侧其实是*(q->next), q->next通常代表的是q结点所指向的下一个结点的地址 这个地址存放着一个这种类型的结点, 你对这一个结点取* 不是太理解
尼勒克县15383241717: 数据结构中单链表的表示 - ?
戏贪硫酸: Node 是一个结构体的类型,LinkList 是结构体指针的类型,如LinkList head,这个head就是一个指针变量,可以用来指向单链表的结点.等同于Node *head;
尼勒克县15383241717: 编写一程序,交换单链表中P所指向的位置和其后续位置上的两个结点,head指向链表的表头,P为指向该链表的某一个结点.用数据结构实现. - ?
戏贪硫酸: node *pNode; pNode = new node; pNode = p; p->next = p->next->next; pNode->next->next=p->next->next; p->next->next = pNode; delete pNode; pNode = NULL;
尼勒克县15383241717: 数据结构上机实验编程(单链表的基本操作) - ?
戏贪硫酸: ); }while(p); printf("\ r=p;} r->next=NULL; return head#include<stdio.h>,small:\n",&x); p=(Node*)malloc(sizeof(Node)); p->data=small->data=temp;,p->data);p=p->next,p; for(i=n;i> r->next=p;next; do{ printf("%3d"data; small->next) if(q->data<...
尼勒克县15383241717: 数据结构单链表?
戏贪硫酸: 大概看了下. 在void Inition_LinkList(LinkList L,int n) 函数中: 应该是 p->next = L->next; L->next = p; 其他的没注意. 有问题请追问.
尼勒克县15383241717: 关于数据结构中单链表的定义,急!!!!!!! - ?
戏贪硫酸: 1.该定义是错误的.要么 typedef struct LNode {int data;struct LNode *next; }LNode; LNode *LinkList; 要么 struct LNode {int data;struct LNode *next; } *LinkList; 2.该类型有两个域,data和next. next的类型是结构体类型,表明指向下一个同类型的.知道一个变量当然就能知道next域了.即知道父亲就能知道孩子.这是递归定义.
尼勒克县15383241717: 数据结构单链表的输入问题 - ?
戏贪硫酸: 前面链表创建有错,p、q、L->next 都没有指向确定的地址.所以 p->data 是不存在的,实际已造成内存泄漏.正确的应该是:p->next = L; L->next = q; q->next = NULL;//创建成依次为 p、L、q 的链表(可能你的意思不是这个顺序,但可作为参考).
尼勒克县15383241717: 数据结构 单链表的基本操作 - ?
戏贪硫酸: 想知道链表的基本操作我就随便写下了,无关代码我就省略了,不好编码,说基本操作,不敢是单链还是双链,循环链原理都是一个样的,只是单链式一头指到尾,(一个指针域一个数据域);其他的就是多了个指针域而已 ------------------ ...
尼勒克县15383241717: 数据结构单循环链表 - ?
戏贪硫酸: #include<iostream.h> #include"Circlist.h" template<class T> void Josephus(Circlist<T>&Js,int n,int m){ CircLinkNode<T> *p=js.getHead(),*pre=NULL; int i,j; for(i=0;i<n-1;i++){ for(j=1;j<m;j++) {pre=p;p=p->link;} cout<<"出列的人是"<<p->data<<...
尼勒克县15383241717: 数据结构单链表?
戏贪硫酸: #ifndef LISTNODE_H #define LISTNODE_H template<typename NODETYPE> class ListNode { friend class List<NODETYPE>; public: ListNode(const NODETYPE &); NODETYPE getData() const; private: NODETYPE data; ListNode<NODETYPE...