#include<iostream.h>
#include<malloc.h>
typedef int elemtype;
typedef struct Lnode
{//创建一个自定义类型为Lnode的单链表
elemtype data;
struct Lnode *next;//结构体指针指向后继结点的地址
}Lnode,*Linklist;
Linklist Create()
{//创建并初始化单链表(前插法)
Linklist L;
L=(Linklist)malloc(sizeof(Lnode));
L->next=NULL;//创建一个头结点并指向NULL
int x;
cin>>x;
while(x!=9999)//输入9999将停止输入单链表的数值
{
Linklist p;
p=(Linklist)malloc(sizeof(Lnode));//创建一个新的结点p,存放新的值
p->data=x;
p->next=L->next;//将新结点指向上一个结点
L->next=p;//将头指针指向刚开辟的结点
cin>>x;
}
return L;
}
void Print(Linklist L)
{//打印出这个单链表
Linklist q;
q=L->next;//创建一个新的结点q,用于遍历单链表
while(q!=NULL)
{
cout<<q->data<<" ";
q=q->next;
}//依次输出q.data的值,并使q指向下一个结点
cout<<endl;
}
void Find(Linklist L,int i)
{//查找第i个结点,并输出节点元素的值
Linklist q;
q=L->next;//创建一个新的结点q,用于指向单链表中的某一结点
int j=1;//j用于计数
while((q!=NULL)&&(j<i))
{
q=q->next;
j++;//q指向下一个结点,j+1
}
cout<<"第"<<i<<"个结点的值:"<<q->data<<endl;
}
Linklist Delete(Linklist L,int i)
{//删除第i个结点
Linklist q;
q=L;//创建一个新的结点q,用于指向单链表中的某一结点
int j=1;//用于计数
while((q!=NULL)&&(j<i))
{
q=q->next;
j++;
}//q指向第i个结点的前驱结点,j+1
Linklist temp;
temp=q->next;//用temp指针暂存第i结点,用来最后释放
q->next=temp->next;//前驱结点连上后继结点
delete temp;//释放第i个结点
return L;
}
Linklist Insert(Linklist L,int i,int e)
{//在第i个元素前插入一个新的结点,结点元素值为e
Linklist q;
q=L;//创建一个新的结点q,用于指向单链表中的某一结点
Linklist s;
s=(Linklist)malloc(sizeof(Lnode));
s->data=e;//新建一个结点,并把e放在s.data中
int j=1;//用于计数
while((q!=NULL)&&(j<i))
{
q=q->next;
j++;
}//q指向第i个结点的前驱结点,j+1
s->next=q->next;
q->next=s;//将s结点连上单链表
return L;
}
void main()
{
Linklist L;
char choise;
cout<<"请输入单链表的各个数值:(若输入9999则结束)"<<endl;
L=Create();
Print(L);
cout<<"字母A表示查找第i个结点,并输出节点元素的值"<<endl;
cout<<"字母B表示删除第i个结点"<<endl;
cout<<"字母C表示在第i个元素前插入一个新的结点,结点元素值为e"<<endl;
cout<<"请输入字母:";
cin>>choise;
cout<<endl;
switch(choise)
{
case'A':
{
int i;
cout<<"请输入i:"<<' ';
cin>>i;
Find(L,i);
break;
}
case'B':
{
int j;
cout<<"请输入i:"<<' ';
cin>>j;
L=Delete(L,j);
Print(L);
break;
}
case'C':
{
int z,e;
cout<<"请输入i和e:"<<' ';
cin>>z>>e;
L=Insert(L,z,e);
Print(L);
break;
}
}
}
数据结构—单链表的建立及使用
猜你喜欢
转载自blog.csdn.net/qq_41596915/article/details/82854037
今日推荐
周排行