用C语言编写建立一个从表尾到表头逆向单链线性表且进行插入 删除的程序

2022-07-25 财经 56阅读
#include
using namespace std;
struct Linklist
{
int data;
Linklist *next;
};

Linklist *L,*rear;

void create()//尾插法建立链表
{
Linklist *p;
int x;
cout<<"输入链表元素(按升序顺序输入):"
while(cin>>x&&x!=0)
{
if(L==NULL)
{
L=new Linklist;
L->data=x;
rear=L;
L->next=NULL;
}
else
{
p=new Linklist;
p->data=x;
rear->next=p;
p->next=NULL;
rear=p;
}
}
rear->next=NULL;
}

void del(int x)//删除data域值为x的结点
{
Linklist *p,*k,*t;
k=p=L;
while(p!=NULL)
{
if(p->data==x)
break;
k=p;
p=p->next;
}
if(p==L)
{
p=L;
L=L->next;
delete p;
}
else if(p==rear)
{
k->next=NULL;
delete p;
}
else if(p==NULL)
{
cout<<"没有值为"< }
else
{
k->next=p->next;
delete p;
}
}

void insert(int x)//插入data域值为x的结点(默认原链表为升序排列)
{
Linklist *s,*p,*k;
s=new Linklist;
s->data=x;
s->next=NULL;
k=p=L;
while(p!=NULL)
{
if(p->data>=x)
break;
k=p;
p=p->next;
}
if(p==L)
{
L=s;
s->next=p;
}
else if(p==NULL)
{
k->next=s;
}
else
{
k->next=s;
s->next=p;
}
}
void output()//将链表输出
{
Linklist *p;
p=L;
cout<<"链表中的元素为:";
while(p!=NULL)
{
cout<data<<" ";
p=p->next;
}
cout<}
void LinkListDemo()
{ // L是无头结点的单链表
Linklist *q, *p,*t;//p指针用于指示原链表最后的结点(即an),q指针用于指示原来的头结点(即a1)
q=L;
if ( q && q->next )
{
t=q;//将q指针指向a1
L=L->next;//将L指针指向新链表的头结点(即a2)
rear->next=q;
q->next=NULL;
t=NULL;
}
}

void main()
{
create();
output();
int x;
cout<<"输入需要插入的元素:";
cin>>x;
insert(x);
output();
cout<<"输入需要删除的元素:";
cin>>x;
del(x);
output();
LinkListDemo();
output();
}
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com