所以我正在对循环列表做一个非常基本的实现。我还没有删除功能。每当我运行cpp时,我都会遇到一个段错误11.任何反馈都会非常感激。谢谢。
#include <iostream>
using namespace std;
struct node{
node* next=NULL;
bool tail= false;
int contents;
};
node* start;//start is a pointer that exists at the start of the list before the first element
class CircList{
node *seek;
public:
CircList (){ //creates a list of one node that points to itself
node *b= new node;
b->contents=0;
b->next = b;
start->next=b;
b->tail=true;
}
bool empty(){
if(start->next==NULL){
return true;
}
return false;
}
int size(CircList a){
if(start->next==NULL){
cout<<"size is 0 \n";
return true;
}
seek=start->next;
for(int i=0; i++;){
if(seek->tail==true){
cout<<"size is "<<i;
}
seek=seek->next;
}
return 0;
}
void insert(int pos, int val){
if(start->next ==NULL){//if inseting when the list is empty
node *b= new node;
b->next = b;
b->tail=true;
return;
}
node *b= new node;
b->contents= val;
seek=start->next;
for(int i=0;i<=pos; i++){
if(seek->tail==true){//if inserting at the end
seek->tail=false;
b->tail=true;
seek->next=b;
b->next=start->next;
}
if(pos==i){//if inserting between two nodes
b->next = seek->next;
seek->next = b;
}
seek=seek->next;
}
}
void remove(int a){
seek=start->next;
for(int i=0;i<=a-1; i++){
if(i<a){
seek=seek->next;
}
if(i==a-1){
}
}
}
void display(){
cout<<start->next->contents; //will also be completed in the near future
seek=start->next;
for(int i=0; ;i++){
if(seek->tail==false){
cout<<seek->contents<<"\n";
}
if(seek->tail==true){
cout<<seek->contents<<"\n";
return;
}
}
}
};
那是.h文件。以下是cpp。我只是插入数字进行测试。我想让程序运行,以便我可以测试它的行为。
#include <iostream>
#include "CircList.h"
using namespace std;
int main(){
CircList a;
a.insert (5,5);
a.insert (5,5);
a.insert (1,4);
a.insert (20,65);
a.insert (3,7);
a.size(a);
a.display();
}
答案 0 :(得分:0)
我一直将start视为节点而不是指针。通过使start = Null并替换所有&#34; start-&gt; next&#34;&#34; start&#34;,我得到它来编译和运行。但现在它只能在内容中无限插入值为0的节点。
编辑:我修好了。通过将显示函数中的那个奇怪的for循环更改为while循环,它不再对构造函数中的节点进行无限插入。它现在似乎运作得足够好。
答案 1 :(得分:0)
这会导致seg故障
start->next=b;
因为在程序开始时start为NULL所以你要取消引用空指针。
而是将start设置为构造函数中的第一个节点
start = b;
答案 2 :(得分:-1)
您的全局变量start
是一个未初始化的指针,但您可以在整个地方取消引用它。