v甲鱼 发表于 2018-5-18 10:58:08

数据结构定义结构体调用的一点困惑?

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:37

是采用 . 还是 -> 取决于你声明的结构体对象:
如果是普通变量就用 .
如果是指针就用 ->

跟结构体里面定义的属性类型无关

v甲鱼 发表于 2018-5-18 17:29:10

BngThea 发表于 2018-5-18 11:29
是采用 . 还是 -> 取决于你声明的结构体对象:
如果是普通变量就用 .
如果是指针就用 ->


顺序表我定义是指针变量啊,这是指针啊,为什么用.啊

BngThea 发表于 2018-5-18 22:26:15

v甲鱼 发表于 2018-5-18 17:29
顺序表我定义是指针变量啊,这是指针啊,为什么用.啊

上你的代码段看看

v甲鱼 发表于 2018-5-19 08:08:46

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);
}

v甲鱼 发表于 2018-5-19 08:09:31

BngThea 发表于 2018-5-18 22:26
上你的代码段看看

这是顺序表的代码段,,定义的是指针,是用的.

Xia_SK 发表于 2018-8-4 20:59:06

看你的代码是写的C++写的,那么对象这个概念我觉得你应该明白吧!用.运算符还是 -> 运算符,取决于你的L是怎样的一个对象。在顺序表中,L是通过Sqlist实例化的一个对象,elem是它的一个成员,所以用.运算符。而在调用单链表的data中,L是被实例化结构体的一个指针类型,所以访问它的成员应该就用 ->运算符。
页: [1]
查看完整版本: 数据结构定义结构体调用的一点困惑?