C++里 在建立链表的时候指针域为什么是struct node*打头的?
还有开辟一个新的空间怎么用?好像是用malloc什么的,但是具体怎么用不清楚,有没有高手来帮我解释一下,谢谢了...
还有开辟一个新的空间怎么用?好像是用malloc什么的,但是具体怎么用不清楚,有没有高手来帮我解释一下,谢谢了
展开
4个回答
展开全部
所谓指针域就是指向下一个节点的指针,实际上是一个地址,node*表示指针所指的数据类型是node(node一旦被定义了之后就可以作为一种数据类型来使用)。malloc()是一个分配内存的函数,其原型是void *malloc(unsigned int num_bytes);函数里面的参数num_bytes是你分配内存的大小,void* 表示返回的指针类型,void*说明返回的指针类型可以是任意的,因此需要做一个强制类型转换。至于参数num_bytes,这里通常会涉及到另一个函数sizeof(a),a是一种数据类型,例如node* first = (node*)malloc(5 * sizeof(node));就是给链表分配了5个节点大小的内存,并将首地址返回给表头first,之后可以往申请的内存里面添加数据,当然在分配内存的时候也可以根据需要,等到要添加数据的时候再申请一个单位的内存。
展开全部
node指的是链表中的节点。C++中,vector的性能比链表要好的。要查询优化的话用tree吧。
开辟空间不要用 malloc。那个是C函数,到了c++,有了更简单的方法,new关键字。
例:
int *p = new int;
就分配了一个int占有的空间给指针p。
开辟空间不要用 malloc。那个是C函数,到了c++,有了更简单的方法,new关键字。
例:
int *p = new int;
就分配了一个int占有的空间给指针p。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这位兄台,正好我写了一个链表玩玩的,就拿给你看看吧!!!
#include <iostream>
using namespace std;
class student
{
private:
class node
{
public:
int num;
int grade;
node* next;
node(int m,int n):num(m),grade(n),next(NULL){}
};
node* head;
public:
student():head(NULL){}
~student(void)
{
clear();
}
void clear(void)
{
node* p = head;
while(p != NULL)
{
node* q = p->next;
delete p;
p = q;
}
}
void create(int n,int m)//插入学生编号和成绩
{
node* p = new node(n,m);
p->next = head;
head = p;
}
void del(int m)//删除成绩低于M的学生
{
node* p = head;
while((p->grade)<m)
{
head = p->next;
delete p;
p = head;
}
for(;(p->next)!=NULL;)
{
if((p->next->grade) < m )
{
node* q = p->next;
p->next = q->next;
delete q;
continue;
}
p=(p->next);
}
}
void print(void)//输出学生信息
{
node* p = head;
for(;p!=NULL;p=p->next)
{
cout << "编号:" << p->num << "成绩:" << p->grade << endl;
}
}
void del_chain(void)
{
clear();
}
};
int main()
{
student stu;
stu.create(1,500);//参数1:编号 2:成绩
stu.create(2,450);
stu.create(3,700);
stu.create(4,600);
stu.create(5,500);
stu.create(6,500);
stu.create(7,560);
stu.create(8,500);
stu.create(9,300);
stu.create(10,400);
stu.print();
cout << endl;
stu.del(500);//参数:合格分数线
stu.print();
return 0;
}
#include <iostream>
using namespace std;
class student
{
private:
class node
{
public:
int num;
int grade;
node* next;
node(int m,int n):num(m),grade(n),next(NULL){}
};
node* head;
public:
student():head(NULL){}
~student(void)
{
clear();
}
void clear(void)
{
node* p = head;
while(p != NULL)
{
node* q = p->next;
delete p;
p = q;
}
}
void create(int n,int m)//插入学生编号和成绩
{
node* p = new node(n,m);
p->next = head;
head = p;
}
void del(int m)//删除成绩低于M的学生
{
node* p = head;
while((p->grade)<m)
{
head = p->next;
delete p;
p = head;
}
for(;(p->next)!=NULL;)
{
if((p->next->grade) < m )
{
node* q = p->next;
p->next = q->next;
delete q;
continue;
}
p=(p->next);
}
}
void print(void)//输出学生信息
{
node* p = head;
for(;p!=NULL;p=p->next)
{
cout << "编号:" << p->num << "成绩:" << p->grade << endl;
}
}
void del_chain(void)
{
clear();
}
};
int main()
{
student stu;
stu.create(1,500);//参数1:编号 2:成绩
stu.create(2,450);
stu.create(3,700);
stu.create(4,600);
stu.create(5,500);
stu.create(6,500);
stu.create(7,560);
stu.create(8,500);
stu.create(9,300);
stu.create(10,400);
stu.print();
cout << endl;
stu.del(500);//参数:合格分数线
stu.print();
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
node结构体只是抽象的代表了一个链表的节点,链表的节点都会存在一个Node* pNext指针指向下一个节点,还会存在一个int value代表此节点存储的数据时多少,C++中用new比较好,因为可以自动调用构造函数。当然了,建立链表你也可以改名字,例:struct yourname{int value;yourname* pNext;};
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询