如何将元素附加到链表?



我在C++中的指针方面遇到了一些问题,我无法将元素添加到链表。

这是我的代码:

list.h

#include <iostream>
#define first(L) L.first
#define last(L) L.last
#define next(P) P->next
#define info(P) P->info
using namespace std;
typedef int infotype;
typedef struct elmlist *address;
struct elmlist{
infotype info;
address next;
};
struct List{
address first;
address last;
};
void createList(List &L);
address allocate(infotype x);
void insertLast(List &L, address P);
void printInfo(List L);

list.cpp

#include <iostream>
#include "list.h"
using namespace std;
void createList(List &L){
first(L) = NULL;
}
address allocate(infotype x){
address p = new elmlist;
info(p) = x;
next(p) = NULL;
return p;
}
void insertLast(List &L, address P){
last(L) = P;
}
void printInfo(List L){
address p = last(L);
while(p != NULL){
cout << info(p) << ", ";
p = next(p);
}
cout<<endl;
}

main.cpp

#include <iostream>
#include "list.h"
using namespace std;
int main()
{
List L;
infotype x;
address a;
for (int y = 0; y<10; y++){
cout<<"Digit " << y+1 << " : ";
cin>>x;
a = allocate(x);
insertLast(L,a);
}
cout<<"isi list: ";
printInfo(L);
return 0;
}

使用上面的代码,我的结果只显示以下输出:

Digit 1 : 1
Digit 2 : 2
Digit 3 : 3
Digit 4 : 4
Digit 5 : 5
Digit 6 : 6
Digit 7 : 7
Digit 8 : 8
Digit 9 : 9
Digit 10 : 0
isi list: 0,

我的预期输出是:1,2,3,4,5,6,7,8,9,0

以下是使其工作的方法:

  1. 初始化、lastfirstnullptr,这样我们就可以检测列表何时为空。
struct List
{
address first = nullptr;
address last = nullptr;
};
  1. 如果列表为空,请将lastfirst都设置为添加元素。否则,使last指向添加的元素,并设置新last
void insertLast(List &L, address P)
{
if(first(L) == nullptr){
first(L) = P;
last(L) = P;
return;
}
next(last(L)) = P;
last(L) = P;
}
  1. 修复了对元素的迭代,以便我们从乞求而不是结束开始:
void printInfo(List L)
{
address p = first(L);

除此之外,请不要以这种方式使用#define。它使代码真的不可读。此外,您的C++代码更像是 C 风格,如果您尝试学习C++,这并不好。

相关内容

  • 没有找到相关文章

最新更新