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

 我来答
aolingwen
2010-10-26 · 超过36用户采纳过TA的回答
知道答主
回答量:147
采纳率:0%
帮助的人:99.5万
展开全部
这是我学数据结构时候没事自己写的 请鉴定
#include <iostream>
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<<head_pr->data<<"->";
head_pr=head_pr->next;
}
cout<<head_pr->data;
cout<<endl;
}
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<<"插入位置非法"<<endl;
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<<"结点不存在!"<<endl;
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<<"排序成功!"<<endl;
}
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<<endl;
cout<<"\t1.显示链表信息"<<endl<<"\t2.插入操作"<<endl<<"\t3.删除操作"<<endl<<"\t4.查找操作"<<endl<<"\t5.升序排序"<<endl;
for(int i=0;i!=80;++i)
{
cout<<"*";
}
for(int i=0;i!=80;++i)
{
cout<<"*";
}
cout<<endl;

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<<main_p->locate(head,key_3)<<endl;
break;
case 5:
main_p->paixu(head);
break;
default:
cout<<"输入非法!"<<endl;
break;
}
cout<<"你是否还要继续?(Y/N)";
cin>>choice_shifou;
}
while(choice_shifou=='y'||choice_shifou=='Y');
return 0;
}
297095637
2010-10-24 · TA获得超过506个赞
知道小有建树答主
回答量:483
采纳率:0%
帮助的人:342万
展开全部
先创建一个结构体,可以在函数中动态的分配内存空间,然后创建一个单链表。

我是学计算机的,账号就是QQ,不懂可以问我。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式