如何用C++创建一个单链表?

2024-11-20 17:39:34
推荐回答(2个)
回答(1):

这是我学数据结构时候没事自己写的 请鉴定
#include
using namespace std;
class list
{
private:
int data;
list *next;
public:
list *creat();
void print(list*head_pr);
void insert(list* head_in,int x,int y);
void Delete(list* head_De,int x);
list *locate(list* head_lo,int x);
void paixu(list*head_px);
};
list* head=NULL;
list* list::creat()
{
list *p1,*p2,*s;//p1为第一个结点的指针,p2为当前结点的指针,s为新建结点的指针
p1=NULL;
int input;
cout<<"请输入链表的元素(ctrl+z结束输入):";
while(cin>>input)
{
s=new list;
s->data=input;
if(p1==NULL)
{
p1=s;
}
else
{

p2->next=s;
}
p2=s;
}
p2->next=NULL;
head=p1;
return p1;
}
void list::print(list* head_pr)
{
while(head_pr->next!=NULL)
{
cout<data<<"->";
head_pr=head_pr->next;
}
cout<data;
cout<}
void list::insert(list*head_in,int x,int y)
{
list *in_s,*in_p;//s为新建结点的指针,p为查找的指针
in_s=new list;
in_s->data=x;
if(head_in==NULL)
{
head_in->next=in_s;
in_s->next=NULL;
}
else
{
in_p=locate(head_in,y);
if(in_p==NULL)
cout<<"插入位置非法"< else
{
in_s->next=in_p->next;
in_p->next=in_s;
}
}
}
void list::Delete(list*head_De,int x)
{
list*De_p,*De_q;
De_p=head_De;
De_q=head_De->next;
while((De_q!=NULL)&&(De_q->data!=x))
{
De_p=De_q;
De_q=De_q->next;
}
if(De_q==NULL)
cout<<"结点不存在!"< else
{
De_p->next=De_q->next;
delete De_q;
}
}
list* list::locate(list *head_lo, int x)
{
while((head_lo!=NULL)&&head_lo->data!=x)
{
head_lo=head_lo->next;
}
return head_lo;
}
void list::paixu(list*head_px)
{
list*px_head=head_px;
list*px_p1;
list*px_p2;
for(px_p1=px_head;px_p1->next!=NULL;px_p1=px_p1->next)
{
for(px_p2=px_p1->next;px_p2!=NULL;px_p2=px_p2->next)
{
if(px_p2->data>px_p2->next->data)
{
int t=px_p2->data;
px_p2->next->data=px_p2->data;
px_p2->next->data=t;
}
}
}
cout<<"排序成功!"<}
int main()
{

list l;
list* main_p=&l;
main_p->creat();
char choice_shifou;
int choice;
do
{
cin.clear();
for(int i=0;i!=80;++i)
{
cout<<"*";
}
for(int i=0;i!=80;++i)
{
cout<<"*";
}
cout< cout<<"\t1.显示链表信息"< for(int i=0;i!=80;++i)
{
cout<<"*";
}
for(int i=0;i!=80;++i)
{
cout<<"*";
}
cout<
cout<<"请输入功能选项:";
cin>>choice;
switch(choice)
{
case 1:main_p->print(head);
break;
case 2:
int key,weizhi;
cout<<"请输入你要插入的数字:";
cin>>key;
cout<<"请输入你要插入的位置:";
cin>>weizhi;
main_p->insert(head,key,weizhi);
break;
case 3:
int key_2;
cout<<"请输入你要删除的数字:";
cin>>key_2;
main_p->Delete(head,key_2);
break;
case 4:
int key_3;
cout<<"请输入你要查找的数字:";
cin>>key_3;
cout<locate(head,key_3)< break;
case 5:
main_p->paixu(head);
break;
default:
cout<<"输入非法!"< break;
}
cout<<"你是否还要继续?(Y/N)";
cin>>choice_shifou;
}
while(choice_shifou=='y'||choice_shifou=='Y');
return 0;
}

回答(2):

先创建一个结构体,可以在函数中动态的分配内存空间,然后创建一个单链表。

我是学计算机的,账号就是QQ,不懂可以问我。