哪个高手用C++的类写一个双向链表程序给我啊?
不要用模板来写,因为那个我看不懂。程序中包含建立链表,显示链表,删除节点,插入节点,计算节点个数,查找制定节点。...
不要用模板来写,因为那个我看不懂。程序中包含建立链表,显示链表,删除节点,插入节点,计算节点个数,查找制定节点。
展开
1个回答
展开全部
以前的写的一个简单双链表我直接copy一下吧,功能有插入、删除,输入的时候-1标志结束,有不懂的地方可以再问
//双链表(功能: 插入元素insert 删除元素del)
#include<iostream>
using namespace std;
typedef struct node{
int data;
struct node *n1;
struct node *n2;
}SNODE;
SNODE *head,*tail;
SNODE* creat(){
int num;
SNODE *head,*r,*s;
head=(SNODE *)malloc(sizeof(SNODE));
tail=(SNODE *)malloc(sizeof(SNODE));
r=head;
cin>>num;
while(num!=-1){
s=(SNODE *)malloc(sizeof(SNODE));
s->data=num;
r->n1=s;
s->n2=r;
r=s;
cin>>num;
}
r->n1=tail;
tail->n2=r;
tail->n1=head;
head->n2=tail;
return head;
}
void print(SNODE *M){
SNODE *p;
if(M==head){M=head;goto head;}
if(M==tail){M=tail;goto tail;}
head:
if(M->n1==tail){cout<<"空链表\n";return;}
p=M->n1;
cout<<"正序输出链表开始->";
while(p!=tail){
cout<<p->data<<"->";
p=p->n1;
}
cout<<"结束\n";return;
tail:
if(M->n2==head){cout<<"空链表\n";return;}
p=M->n2;
cout<<"逆序输出链表开始->";
while(p!=head){
cout<<p->data<<"->";
p=p->n2;
}
cout<<"结束\n";return;
}
void insert(SNODE *head){
int m,n;
SNODE *p,*q;
p=(SNODE *)malloc(sizeof(SNODE));
q=head->n1;
cout<<"\n\n请输入要插入的位置: ";cin>>m;
cout<<"请输入要插入的元素: ";cin>>n;
while(q!=head&&q->data!=m)q=q->n1;
if(q->data==m){
p->data=n;
p->n2=q->n2;
p->n1=q;
q->n2->n1=p;
q->n2=p;
}
else{cout<<"未找到该元素\n";return;}
cout<<"插入元素后输出如下:\n";
print(head);
print(tail);
}
void del(SNODE *head){
SNODE *p;
p=head->n1;
if(p==tail){cout<<"空链表\n";return;}
int n;
cout<<"\n\n请输入要删除的元素: ";
cin>>n;
while(p!=tail&&p->data!=n)p=p->n1;
if(p->data==n){
p->n1->n2=p->n2;
p->n2->n1=p->n1;
}
else{cout<<"未找到该元素\n";return;}
cout<<"\n\n删除元素后输出如下: \n";
print(head);
print(tail);
}
void main(){
char s;
head=creat();
print(head);
print(tail);
cout<<"\n\n是否要插入元素? Y插入 N退出\n";
cin>>s;
while(s=='y'||s=='Y'){
insert(head);
cout<<"\n\n是否要继续插入元素? Y插入 N退出\n";
cin>>s;
}
cout<<"\n\n是否要删除元素? Y删除 N退出\n";
cin>>s;
while(s=='y'||s=='Y'){
del(head);
cout<<"\n\n是否要继续删除元素? Y删除 N退出\n";
cin>>s;
}
}
//双链表(功能: 插入元素insert 删除元素del)
#include<iostream>
using namespace std;
typedef struct node{
int data;
struct node *n1;
struct node *n2;
}SNODE;
SNODE *head,*tail;
SNODE* creat(){
int num;
SNODE *head,*r,*s;
head=(SNODE *)malloc(sizeof(SNODE));
tail=(SNODE *)malloc(sizeof(SNODE));
r=head;
cin>>num;
while(num!=-1){
s=(SNODE *)malloc(sizeof(SNODE));
s->data=num;
r->n1=s;
s->n2=r;
r=s;
cin>>num;
}
r->n1=tail;
tail->n2=r;
tail->n1=head;
head->n2=tail;
return head;
}
void print(SNODE *M){
SNODE *p;
if(M==head){M=head;goto head;}
if(M==tail){M=tail;goto tail;}
head:
if(M->n1==tail){cout<<"空链表\n";return;}
p=M->n1;
cout<<"正序输出链表开始->";
while(p!=tail){
cout<<p->data<<"->";
p=p->n1;
}
cout<<"结束\n";return;
tail:
if(M->n2==head){cout<<"空链表\n";return;}
p=M->n2;
cout<<"逆序输出链表开始->";
while(p!=head){
cout<<p->data<<"->";
p=p->n2;
}
cout<<"结束\n";return;
}
void insert(SNODE *head){
int m,n;
SNODE *p,*q;
p=(SNODE *)malloc(sizeof(SNODE));
q=head->n1;
cout<<"\n\n请输入要插入的位置: ";cin>>m;
cout<<"请输入要插入的元素: ";cin>>n;
while(q!=head&&q->data!=m)q=q->n1;
if(q->data==m){
p->data=n;
p->n2=q->n2;
p->n1=q;
q->n2->n1=p;
q->n2=p;
}
else{cout<<"未找到该元素\n";return;}
cout<<"插入元素后输出如下:\n";
print(head);
print(tail);
}
void del(SNODE *head){
SNODE *p;
p=head->n1;
if(p==tail){cout<<"空链表\n";return;}
int n;
cout<<"\n\n请输入要删除的元素: ";
cin>>n;
while(p!=tail&&p->data!=n)p=p->n1;
if(p->data==n){
p->n1->n2=p->n2;
p->n2->n1=p->n1;
}
else{cout<<"未找到该元素\n";return;}
cout<<"\n\n删除元素后输出如下: \n";
print(head);
print(tail);
}
void main(){
char s;
head=creat();
print(head);
print(tail);
cout<<"\n\n是否要插入元素? Y插入 N退出\n";
cin>>s;
while(s=='y'||s=='Y'){
insert(head);
cout<<"\n\n是否要继续插入元素? Y插入 N退出\n";
cin>>s;
}
cout<<"\n\n是否要删除元素? Y删除 N退出\n";
cin>>s;
while(s=='y'||s=='Y'){
del(head);
cout<<"\n\n是否要继续删除元素? Y删除 N退出\n";
cin>>s;
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询