C++写的带有头结点单链表创建,插入,删除,显示
2012-08-21 09:07
381 查看
#include <iostream>
using namespace std;
struct link
{
char data;
struct link *next;
};
link *head,*tail; //创建头指针和尾指针
int creat();
/******显示数据*************/
void show()
{
link *q=head;
if(head->next==NULL)
{
cout<<"无任何数据,请创建链表"<<endl;
creat();
}
else
{
q=q->next; //跳过头结点
cout<<"show:";
do{
cout<<q->data<<" ";
q=q->next;
}while(q!=NULL);
cout<<endl;
}
}
/*****带有头结点的创建,分为头插法和尾插法***************/
int creat()
{
char j;
int m=0; //创建的节点数目
link *p,*q;
q=head;
if(q->next!=NULL)
{
cout<<"已经创建好数据链表"<<endl;
return -1;
}
else
{
int i;
cout<<"是插在头部还是尾部0:头部;1:尾部 :";
cin>>i;
cout<<"请输入,以#结束"<<endl;
if(i==1)
{
while(cin>>j,j!='#')
{
p=new link; //生成新节点
p->data=j;
tail->next=p; //把新节点加到以生成的节点的后面
tail=p; //尾指针指向新生成的节点
m++;
}
tail->next=NULL; //尾节点下一个指向为NULL
}
else
{
tail=NULL; //尾指针为NULL
while(cin>>j,j!='#')
{
p=new link; //生成新节点
p->data=j;
head->next=p;
p->next=tail;
tail=p;
if(m==0)
q=p;
m++;
}
q->next=NULL; //尾节点下一个指向为NULL
}
return m;
}
}
/*********删除指定节点***********/
void delelte()
{
link *p=head->next;//P指向第一个节点,跳过头结点
link *q=head;
char m;
int n=0;
cout<<"请输入要删除的节点data: ";
cin>>m;
while(p!=NULL)
{
if(m==p->data)
{
q->next=p->next;
p=NULL;
n=1;
break;
}
else
{
p=p->next;
q=q->next;
}
}
if(n==1)
cout<<"删除完成!"<<endl;
else
cout<<"不存在你要删除的!"<<endl;
show();
}
/*******插入一个节点************/
void insert()
{
link *p=head->next;
int m;
int n=0;
char data1;
cout<<"请问要插在哪里?0:表头;1:某个数后面 ";
cin>>m;
cout<<"请输入data ";
cin>>data1;
if(m==0)
{
link *q=new link;
q->data=data1;
head->next=q;
q->next=p;
}
else
{
char data2;
cout<<"请输入你要插哪个数后面,请输入它的data ";
cin>>data2;
while(p!=NULL)
{
if(data2==p->data)
{ link *f=new link;
p->next=f;
f->next=p->next;
n=1;
break;
}
else
{
p=p->next;
}
}
if(n==0)
cout<<"不存在你要插的这个数";
}
show();
}
int main()
{
head=new link;
head->next=NULL;
tail=head; //尾指针指向头结点
int i=creat();
if(i!=-1)
{cout<<"创建OK"<<endl;
cout<<"共创建了"<<i<<"个节点"<<endl;
}
show();
delelte();
insert();
return 0;
}
相关文章推荐
- 用结构体实现链表的创建、遍历、结点插入、结点删除
- C++ 单链表创建、插入和删除
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 数据结构:链表创建、显示、求和、插入、删除等操作的代码实现
- (C++版)链表(二)——实现单项循环链表创建、插入、删除等操作
- c/c++ 双向链表 创建 插入 删除
- (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作
- c++实现单链表创建,删除,遍历,插入,修改操作
- (2)单链表的操作 ① 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数
- c++实现循环单链表的相关操作(创建,插入,删除,保序插入,统计结点)
- 每天一个小程序(2)——带头结点的链表的创建以及插入和删除
- 双向链表的创建、结点的插入、删除与打印
- 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数将其返回。 ⑤ 建立两个
- (C++版)链表(二)——实现单项循环链表创建、插入、删除等操作
- C++中链表的创建、输出、节点删除、节点插入、翻转、清空
- 循环链表的创建、插入、删除、逆序、显示(C++实现)
- C++链表的创建、插入、删除、查找、合并、排序、修改等操作的实现
- 循环链表的创建、插入、删除、逆序、显示(C++实现)
- 用c++实现单向链表的创建,插入和删除
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表