鱼C论坛

 找回密码
 立即注册
查看: 564|回复: 11

[已解决]求助!!

[复制链接]
发表于 2020-3-12 18:18:39 From FishC Mobile | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 1753561666 于 2020-3-12 21:39 编辑

今天刚学数据结构的线性表,就按着课写了个代码,只有第一个函数的时候还好使,加上第二个函数就会一直在运行框里面卡着出不来,我还完全看不出来哪里出问题了,前来求助

代码如下:

#include<iostream>
using namespace std;
typedef struct hhh
{
hhh *llink;
int data;
hhh *rlink;
}DLnode;


int main()
{
        void creatLinkListR(DLnode *head);
        void maxListLink(DLnode *head);
        DLnode *head=(DLnode *)malloc(sizeof(DLnode));
        creatLinkListR(head);
        maxListLink(head);
        return 0;
}


void creatLinkListR(DLnode *head)
{
        head=(DLnode *)malloc(sizeof(DLnode));
        head->rlink=NULL;
        head->llink=NULL;
        int n;
        cout<<"请输入链表的节点个数:"<<endl;
        cin>>n;
        DLnode *p=NULL,*r=head;
        cout<<"请输入链表数据"<<endl;
        for(int i=0;i<n;i++)
        {
                p=(DLnode *)malloc(sizeof(DLnode));
                p->rlink=NULL;
                p->llink=r;
                cin>>p->data;
                r->rlink=p;
                r=p;
                cout<<p->data<<'\t';
        }
        return;
}


void maxListLink(DLnode *head)
{
        DLnode *p=head->rlink,*q=p;
        while(p!=NULL)
        {
                p=p->rlink;
                if(p->data > q->data)
                q=p;
        }
        cout<<"最大值为:"<<q->data;<<endl;
        return;
}
最佳答案
2020-3-13 18:11:42
楼主你好

首先,第二个函数的功能是找出双链表中元素最大的那一个,并且输出,楼主用的是使用两个指针作为标记,依次推进

但是这样一来,涉及的指针操作就比较多,而且容易出错。

我的想法是将找最值换成存储数值域,而不是记录最大值所在的结点,这样就避免了多个指针的使用,代码如下:
  1. void maxListLink(DLnode* head)
  2. {
  3.         int temp;
  4.         DLnode* p = head->rlink;
  5.         temp = p->data;
  6.         while (p->rlink!= NULL)
  7.         {
  8.                 p = p->rlink;
  9.                 if (temp < p->data)
  10.                         temp = p->data;
  11.         }
  12.         cout << "最大值为:" << temp<< endl;
  13.         return;
  14. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-12 18:34:29 | 显示全部楼层
cout<<"最大值为:"<<q->data;<<endl;
head->llink-NULL;
其他的还没找到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-12 18:45:13 | 显示全部楼层
hhh *llink;
hhh *rlink;
这两个分别指的是啥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-12 18:51:33 | 显示全部楼层
本帖最后由 1753561666 于 2020-3-12 18:55 编辑
最后的魁拔 发表于 2020-3-12 18:45
hhh *llink;
hhh *rlink;
这两个分别指的是啥


是我定义的双链表每个节点里指向上一个节点的指针和指向下一个节点的指针,llink是存放的上一个节点的地址,rlink是下一个节点的地址。抱歉我没看懂你之前的解释,第一句话的问题出在了哪里呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-12 18:55:18 | 显示全部楼层
1753561666 发表于 2020-3-12 18:51
是我定义的双链表每个节点里指向上一个节点的指针和指向下一个节点的指针,llink是存放的上一个节点的地 ...

那不好意思,双向链表还没学
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-12 18:56:07 | 显示全部楼层
最后的魁拔 发表于 2020-3-12 18:55
那不好意思,双向链表还没学

奥奥,没事没事
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-12 20:03:30 | 显示全部楼层
好高级啊!你们都学的是C还是C++啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-12 20:11:41 | 显示全部楼层
对牛弹琴的三高C 发表于 2020-3-12 20:03
好高级啊!你们都学的是C还是C++啊?

C++,但这个里面基本都是是C的语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-12 20:21:52 | 显示全部楼层
1753561666 发表于 2020-3-12 20:11
C++,但这个里面基本都是是C的语句

刚刚才开始学C,等C学完了就去学Python的,我是干工控的,单片机需要这些知识,提高提高自己
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-13 18:11:42 | 显示全部楼层    本楼为最佳答案   
楼主你好

首先,第二个函数的功能是找出双链表中元素最大的那一个,并且输出,楼主用的是使用两个指针作为标记,依次推进

但是这样一来,涉及的指针操作就比较多,而且容易出错。

我的想法是将找最值换成存储数值域,而不是记录最大值所在的结点,这样就避免了多个指针的使用,代码如下:
  1. void maxListLink(DLnode* head)
  2. {
  3.         int temp;
  4.         DLnode* p = head->rlink;
  5.         temp = p->data;
  6.         while (p->rlink!= NULL)
  7.         {
  8.                 p = p->rlink;
  9.                 if (temp < p->data)
  10.                         temp = p->data;
  11.         }
  12.         cout << "最大值为:" << temp<< endl;
  13.         return;
  14. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-13 18:17:55 | 显示全部楼层
Mr.Newbe 发表于 2020-3-13 18:11
楼主你好

首先,第二个函数的功能是找出双链表中元素最大的那一个,并且输出,楼主用的是使用两个指针作 ...

另外,有个错误,你的代码最后那个q->data后面应该没有分号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-15 22:30:43 | 显示全部楼层
Mr.Newbe 发表于 2020-3-13 18:11
楼主你好

首先,第二个函数的功能是找出双链表中元素最大的那一个,并且输出,楼主用的是使用两个指针作 ...


哦哦,我get到你的点了,多谢!其实我今天回过神来看发现了我犯的错误,在creatLinkListR这个函数里我又新定义了一个head指针,导致我的参数其实没有传进来,改成这样就好了
void creatLinkListR(DLnode *head)
{
        head->rlink=NULL;
        head->llink=NULL;
        int n;
        cout<<"请输入链表的节点个数:"<<endl;
        cin>>n;
        DLnode *p=NULL,*r=head;
        cout<<"请输入链表数据"<<endl;
        for(int i=0;i<n;i++)
        {
                p=(DLnode *)malloc(sizeof(DLnode));
                p->rlink=NULL;
                p->llink=r;
                cin>>p->data;
                r->rlink=p;
                r=p;
                cout<<p->data<<'\t';
        }
        return;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-27 12:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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