单连表的算法
#include <iostream.h>#include <stdlib.h>
typedef struct Node
{
int data;
struct Node *next;
}Lnode,*Linklist;
Linklist Creat_LinkList()//创建
{
Linklist L;
Lnode *s,*r;
int x,h=6;
L=r=NULL;
cout<<"请输入六个初始链表元素"<<endl;
cin>>x;
while (h>1)
{s=new Lnode;
s->data=x;
if(L==NULL)
L=s;
else
r->next=s;
r=s;
cin>>x;
h--;
}
if(r!=NULL)
r->next=NULL;
return L;
}
Lnode *Get_linklist(Linklist L,int i)
{
Lnode *p;
int j;
p=L->next;
j=1;
while(p!=NULL&&j<i)
{
p=p->next;
j++;
}
return p;
}
int Insert_linklist(Linklist L,int i,int x)//在单链表L的第i个位置插入X
{
Lnode *p,*s;
p=Get_linklist(L,i-1);//查找第i-1个结点
if(p==NULL)
{
cout<<"参数"<<i<<"错,结点不存在"<<endl;
return 0;
}//第i-1个结点不存在,不进行插入
else{
s=new Lnode;//申请,填装结点
s->data=x;
s->next=p->next;//新结点插入第i-1个结点的后面
p->next=s;
return 1;
}
}
void Del_linklist(Linklist L,int i)//删除单链表L上第i个数据结点
{
Linklist p,s;
p=Get_linklist( L,i-1);//查找第i-1个结点
if(p==NULL)
cout<<"第"<<i-1<<"个节点不存在"<<endl;
else
if(p->next==NULL)
cout<<"第"<<i+2<<"个节点不存在"<<endl;
else{
s=p->next;//s指向第i个结点
p->next=s->next;//从链表中删除s结点
cout<<"删除成功"<<endl;
delete s;//释放s结点空间
}
}
void show_linklist(Linklist p)//输出函数
{
cout<<"此时链表中元素如下:"<<endl;
while(p!=NULL){
cout<<p->data<<'\t';
p=p->next;
}
cout<<endl;
}
void menu()
{
cout<<"\n\n\t\t\t 单 链 表\n\n\n\t\t\t0 退 出 \n\n\t\t\t1 插 入\n\n\t\t\t2 删 除\n\n\t\t\t3 显 示 \n\n";
cout<<"请选择你要进行的操作(0----->3):\t";
}
void main()
{
Linklist L=Creat_LinkList();
menu();
while(1)
{
int a,b;
cin>>a;
switch (a)
{
case 0:exit(0);menu();break;
case 1:
cout<<"请输入要插入的位置及元素"<<endl;
cin>>a>>b;
Insert_linklist(L,a,b);
show_linklist(L);
menu();break;
case 2:
cout<<"请输入要删除的位置"<<endl;
cin>>a;
Del_linklist(L,a-1);
show_linklist(L);
menu();break;
case 3:show_linklist(L);menu();break;
default :
menu();
cout<<"输入无效≌请重新输入(0======== 3)"<<endl;
break;
}
}
}