#include
using namespace std;
typedef struct Dnode {
int data;
Dnode *prior,*next;
} dnode;
class list {
public:
list();
int length() const;
void insert(const int i,const int x);
void inverse_set();
void Print();
private:
int count;
dnode *head;
};
list::list() {
head=new dnode;
head->next=head;
head->prior=head;
}
int list::length()const {
return count;
}
int insert(const int i,const int x) {
dnode *p,*head;
int j;
p=head;
j=0;
if((i<1)||(i>count+1))
cout << 0<< endl;
while( j!=i-1)
p=p->next;
j++;
dnode *s=new dnode;
s->data=x;
s->next=p->next;
p->next->prior=s;
p->next=s;
s->prior=p;
count++;
return 1;
}
void list::inverse_set() {
int i;
dnode *p;
p=head->next;
dnode *s;
while(p->next!=head)
s=head->prior;
s->prior->next=head;
head->prior=s->prior;
insert(i,s->data);
}
void list::Print() {
int j=0;
dnode *p=head->next;
while(j<=count) {
cout <data<< endl;
p=p->next;
j++;
}
}
int main() {
list l;
for(int m=1; m<=10; m++) {
l.insert(m,m);
}
l.Print();
l.inverse_set();
l.Print();
}
$g++ -o main *.cpp
main.cpp: In function ‘int insert(int, int)’:
main.cpp:31:18: error: ‘count’ was not declared in this scope
if((i<1)||(i>count+1))
main.cpp:42:5: error: ‘count’ was not declared in this scope
count++;
改
#include
using namespace std;
typedef struct Dnode {
int data;
Dnode *prior,*next;
} dnode;
class list {
public:
list();
int length() const;
int insert(const int i,const int x);
void inverse_set();
void Print();
private:
int count;
dnode *head;
};
list::list() {
head=new dnode;
head->next=head;
head->prior=head;
count=0;
}
int list::length()const {
return count;
}
int list::insert(const int i,const int x) {
dnode *p,*head;
int j;
p=head;
j=0;
if((i<1)||(i>count+1))
cout << 0<< endl;
while( j!=i-1)
p=p->next;
j++;
dnode *s=new dnode;
s->data=x;
s->next=p->next;
p->next->prior=s;
p->next=s;
s->prior=p;
count++;
return 1;
}
void list::inverse_set() {
int i;
dnode *p;
p=head->next;
dnode *s;
while(p->next!=head)
s=head->prior;
s->prior->next=head;
head->prior=s->prior;
insert(i,s->data);
}
void list::Print() {
int j=0;
dnode *p=head->next;
while(j<=count) {
cout <data<< endl;
p=p->next;
j++;
}
}
int main() {
list l;
for(int m=1; m<=10; m++) {
l.insert(m,m);
}
l.Print();
l.inverse_set();
l.Print();
}
改
#include
using namespace std;
typedef struct Dnode {
int data;
Dnode *prior,*next;
} dnode;
class list {
public:
list();
int length() const;
int insert(const int i,const int x);
void inverse_set();
void Print();
private:
int count;
dnode *head;
};
list::list() {
head=new dnode;
head->next=head;
head->prior=head;
count=0;
}
int list::length()const {
return count;
}
int list::insert(const int i,const int x) {
dnode *p,*head;
int j;
p=head;
j=0;
if((i<1)||(i>count+1))
cout << 0<< endl;
while( j!=i-1)
p=p->next;
j++;
dnode *s=new dnode;
s->data=x;
s->next=p->next;
p->next->prior=s;
p->next=s;
s->prior=p;
count++;
return 1;
}
void list::inverse_set() {
int i;
dnode *p;
p=head->next;
dnode *s;
while(p->next!=head)
s=head->prior;
s->prior->next=head;
head->prior=s->prior;
insert(i,s->data);
}
void list::Print() {
int j=0;
dnode *p=head->next;
while(j<=count) {
cout <data<< endl;
p=p->next;
j++;
}
}
int main() {
list l;
for(int m=1; m<=10; m++) {
l.insert(m,m);
}
l.Print();
l.inverse_set();
l.Print();
}
int insert(const int i,const int x) {
那行
改为int list::insert(const int i,const int x) {
修改处见注释,供参考:
#include<iostream>
using namespace std;
typedef struct Dnode {
int data;
Dnode *prior,*next;
} dnode;
class list {
public:
list();
int length() const;
void insert(const int i,const int x);
void inverse_set();
void Print();
private:
int count;
dnode *head;
};
list::list() {
head=new dnode;
head->next=head;
head->prior=head;
count = 0; //修改
}
int list::length()const {
return count;
}
void list::insert(const int i,const int x) { //int insert(const int i,const int x)
dnode *p; //,*head; 修改
int j;
p=head;
j=0;
if(i < 1 || i > count+1){//修改
cout << 0<< endl;
return; //修改
} //修改
while( j!=i-1){ //修改
p=p->next;
j++;
} //修改
dnode *s=new dnode;
s->data=x;
s->next=p->next;
p->next->prior=s;
p->next=s;
s->prior=p;
count++;
return; //return 1;
}
void list::inverse_set() {//反序输出
int i; //i 没有初始化
dnode *p;
p=head->prior; //p=head->next;
dnode *s;
while(p != head){
cout << p->data << endl;
p = p->prior;
}
//s=head->prior;
//s->prior->next=head;
//head->prior=s->prior;
//insert(i,s->data);
}
void list::Print() {
int j=0;
dnode *p=head->next;
while(j < count) { //while(j<=count) 修改
cout <<p->data<< endl;//cout <data<< endl; 修改
p=p->next;
j++;
}
}
int main() {
list l;
for(int m=1; m<=10; m++) {
l.insert(m,m);
}
l.Print();
printf("链表长度:%d\n",l.length()); //修改
l.inverse_set();
//l.Print();
return 0;
}