数据结构定义结构体调用的一点困惑?
typedef struct{
int *elem;
int length;
}Sqlist;
这是定义一个顺序表的结构体。
typedef struct node
{
int data;
struct node *next;
}Lnode,*Linklist;
这是定义一个单链表的结构体。
我的疑问是
在调用顺序表的elem域时,,可以用L.elem
而在调用单链表的data域时,,却是用L->data。。。难道不可以用L.data吗?我观察两者的区别不过是顺序表elem定义是指针,而单链表不是,,如果我定义int *data。。不知调用的时候能否用L.data??
哪位大神能详细解惑下?每次做这个,都在这么想?不敢问老师,只好在这发帖呢{:5_109:} 是采用 . 还是 -> 取决于你声明的结构体对象:
如果是普通变量就用 .
如果是指针就用 ->
跟结构体里面定义的属性类型无关 BngThea 发表于 2018-5-18 11:29
是采用 . 还是 -> 取决于你声明的结构体对象:
如果是普通变量就用 .
如果是指针就用 ->
顺序表我定义是指针变量啊,这是指针啊,为什么用.啊 v甲鱼 发表于 2018-5-18 17:29
顺序表我定义是指针变量啊,这是指针啊,为什么用.啊
上你的代码段看看 BngThea 发表于 2018-5-18 22:26
上你的代码段看看
#include<iostream.h>
#define MAX 1024
typedef int Elemtype;
typedef struct
{
int *elem;
int length;
}Sqlist;
void Initlist(Sqlist &L)
{
L.elem=new int;
if(L.elem==NULL)
return;
else
L.length=0;
}
void createlist(Sqlist &L)
{
cin>>L.length;
for(int i=0;i<L.length;i++)
cin>>L.elem;
}
void printlist(Sqlist L)
{
for(int i=0;i<L.length;i++)
cout<<L.elem<<'\t';
}
int emptylist(Sqlist L)
{
if(L.length==0)
return 0;
else
return 1;
}
intqueryelem(Sqlist L,Elemtype e)
{
for(int i=0;i<L.length;i++)
if(L.elem==e)
return i+1;
return 0;
}
void getelem(Sqlist L,int i,int &e)
{
if(i<1 || i>L.length)
return;
else
e=L.elem;
}
void insertelem(Sqlist &L,int i,int e)
{
if(i<1 || i>L.length+1)
return;
else
for(int k=L.length-1;k>i-1;k--)
L.elem=L.elem;
L.elem=e;
L.length ++;
}
void main()
{
Sqlist L;
Initlist(L);
createlist(L);
printlist(L);
int null;
null=emptylist(L);
if(null==0)
cout<<"it is nulllist";
else
cout<<" \nit is not nulllist";
int e;
cout<<"\nput on query elem";
cin>>e;
int i;
i=queryelem(L,e);
if(i!=0)
cout<<i;
cout<<"\n put on di ji ge elem";
cin>>i;
getelem(L,i,e);
cout<<e;
cout<<"put on insert elem and locate";
cin>>i>>e;
insertelem(L,i,e);
printlist(L);
}
BngThea 发表于 2018-5-18 22:26
上你的代码段看看
这是顺序表的代码段,,定义的是指针,是用的. 看你的代码是写的C++写的,那么对象这个概念我觉得你应该明白吧!用.运算符还是 -> 运算符,取决于你的L是怎样的一个对象。在顺序表中,L是通过Sqlist实例化的一个对象,elem是它的一个成员,所以用.运算符。而在调用单链表的data中,L是被实例化结构体的一个指针类型,所以访问它的成员应该就用 ->运算符。
页:
[1]