鱼C论坛

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

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

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

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

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

x
  1. typedef struct
  2. {
  3.     int *elem;
  4.     int length;
  5. }Sqlist;
复制代码
这是定义一个顺序表的结构体。



  1. typedef struct node
  2. {
  3.     int data;
  4.     struct node *next;
  5. }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
上你的代码段看看
  1. #include<iostream.h>
  2. #define MAX 1024
  3. typedef int Elemtype;
  4. typedef struct
  5. {
  6.     int *elem;
  7.     int length;
  8. }Sqlist;

  9. void Initlist(Sqlist &L)
  10. {
  11.     L.elem=new int[MAX];
  12.     if(L.elem==NULL)
  13.         return;
  14.     else
  15.         L.length=0;
  16. }

  17. void createlist(Sqlist &L)
  18. {
  19.     cin>>L.length;
  20.     for(int i=0;i<L.length;i++)
  21.         cin>>L.elem[i];
  22. }

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

  28. int emptylist(Sqlist L)
  29. {
  30.     if(L.length==0)
  31.         return 0;
  32.     else
  33.         return 1;
  34. }

  35. int  queryelem(Sqlist L,Elemtype e)
  36. {
  37.     for(int i=0;i<L.length;i++)
  38.         if(L.elem[i]==e)
  39.             return i+1;
  40.     return 0;
  41. }

  42. void getelem(Sqlist L,int i,int &e)
  43. {
  44.     if(i<1 || i>L.length)
  45.         return;
  46.     else
  47.         e=L.elem[i-1];
  48. }

  49. void insertelem(Sqlist &L,int i,int e)
  50. {
  51.     if(i<1 || i>L.length+1)
  52.         return;
  53.     else
  54.         for(int k=L.length-1;k>i-1;k--)
  55.             L.elem[k+1]=L.elem[k];
  56.             L.elem[i-1]=e;
  57.             L.length ++;
  58. }
  59.         
  60. void main()
  61. {
  62.     Sqlist L;
  63.     Initlist(L);
  64.     createlist(L);
  65.     printlist(L);
  66.     int null;
  67.     null=emptylist(L);
  68.     if(null==0)
  69.         cout<<"it is nulllist";
  70.     else
  71.         cout<<" \nit is not nulllist";
  72.     int e;
  73.     cout<<"\nput on query elem";
  74.     cin>>e;
  75.     int i;
  76.     i=queryelem(L,e);
  77.     if(i!=0)
  78.         cout<<i;
  79.     cout<<"\n put on di ji ge elem";
  80.     cin>>i;
  81.     getelem(L,i,e);
  82.     cout<<e;
  83.     cout<<"put on insert elem and locate";
  84.     cin>>i>>e;
  85.     insertelem(L,i,e);
  86.     printlist(L);
  87. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> 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-4-16 14:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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