1753561666 发表于 2020-3-12 18:18:39

求助!!

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

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

代码如下:

#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-12 18:34:29

cout<<"最大值为:"<<q->data;<<endl;
head->llink-NULL;
其他的还没找到

最后的魁拔 发表于 2020-3-12 18:45:13

hhh *llink;
hhh *rlink;
这两个分别指的是啥

1753561666 发表于 2020-3-12 18:51:33

本帖最后由 1753561666 于 2020-3-12 18:55 编辑

最后的魁拔 发表于 2020-3-12 18:45
hhh *llink;
hhh *rlink;
这两个分别指的是啥

是我定义的双链表每个节点里指向上一个节点的指针和指向下一个节点的指针,llink是存放的上一个节点的地址,rlink是下一个节点的地址。抱歉我没看懂你之前的解释{:10_269:},第一句话的问题出在了哪里呢

最后的魁拔 发表于 2020-3-12 18:55:18

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

那不好意思,双向链表还没学{:10_243:}

1753561666 发表于 2020-3-12 18:56:07

最后的魁拔 发表于 2020-3-12 18:55
那不好意思,双向链表还没学

奥奥,没事没事

对牛弹琴的三高C 发表于 2020-3-12 20:03:30

好高级啊!你们都学的是C还是C++啊?

1753561666 发表于 2020-3-12 20:11:41

对牛弹琴的三高C 发表于 2020-3-12 20:03
好高级啊!你们都学的是C还是C++啊?

C++,但这个里面基本都是是C的语句

对牛弹琴的三高C 发表于 2020-3-12 20:21:52

1753561666 发表于 2020-3-12 20:11
C++,但这个里面基本都是是C的语句

刚刚才开始学C,等C学完了就去学Python的,我是干工控的,单片机需要这些知识,提高提高自己

Mr.Newbe 发表于 2020-3-13 18:11:42

楼主你好

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

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

我的想法是将找最值换成存储数值域,而不是记录最大值所在的结点,这样就避免了多个指针的使用,代码如下:
void maxListLink(DLnode* head)
{
        int temp;
        DLnode* p = head->rlink;
        temp = p->data;
        while (p->rlink!= NULL)
        {
                p = p->rlink;
                if (temp < p->data)
                        temp = p->data;
        }
        cout << "最大值为:" << temp<< endl;
        return;
}

Mr.Newbe 发表于 2020-3-13 18:17:55

Mr.Newbe 发表于 2020-3-13 18:11
楼主你好

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

另外,有个错误,你的代码最后那个q->data后面应该没有分号

1753561666 发表于 2020-3-15 22:30:43

Mr.Newbe 发表于 2020-3-13 18:11
楼主你好

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

哦哦,我get到你的点了,多谢!其实我今天回过神来看发现了我犯的错误{:10_266:},在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;
}
页: [1]
查看完整版本: 求助!!