鱼C论坛

 找回密码
 立即注册
查看: 3382|回复: 6

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

[复制链接]
发表于 2018-5-18 10:58:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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??
哪位大神能详细解惑下?每次做这个,都在这么想?不敢问老师,只好在这发帖呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

跟结构体里面定义的属性类型无关
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-18 17:29:10 | 显示全部楼层
BngThea 发表于 2018-5-18 11:29
是采用 . 还是 -> 取决于你声明的结构体对象:
如果是普通变量就用 .
如果是指针就用 ->

顺序表我定义是指针变量啊,这是指针啊,为什么用.啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-18 22:26:15 From FishC Mobile | 显示全部楼层
v甲鱼 发表于 2018-5-18 17:29
顺序表我定义是指针变量啊,这是指针啊,为什么用.啊

上你的代码段看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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[MAX];
    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[i];
}

void printlist(Sqlist L)
{
    for(int i=0;i<L.length;i++)
        cout<<L.elem[i]<<'\t';
}

int emptylist(Sqlist L)
{
    if(L.length==0)
        return 0;
    else
        return 1;
}

int  queryelem(Sqlist L,Elemtype e)
{
    for(int i=0;i<L.length;i++)
        if(L.elem[i]==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[i-1];
}

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[k+1]=L.elem[k];
            L.elem[i-1]=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);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-19 08:09:31 | 显示全部楼层
BngThea 发表于 2018-5-18 22:26
上你的代码段看看

这是顺序表的代码段,,定义的是指针,是用的.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-4 20:59:06 | 显示全部楼层
看你的代码是写的C++写的,那么对象这个概念我觉得你应该明白吧!用.运算符还是 -> 运算符,取决于你的L是怎样的一个对象。在顺序表中,L是通过Sqlist实例化的一个对象,elem是它的一个成员,所以用.运算符。而在调用单链表的data中,L是被实例化结构体的一个指针类型,所以访问它的成员应该就用 ->运算符。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 08:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表