#include <bits/stdc++.h>
using namespace std;
typedef struct LNode{ //定义单链表节点类型
int data;
struct LNode *next;
}LNode,*LinkList;
LinkList List_HeaInsert(LinkList &L){ //头插法创建单链表
int x;
LNode* s;
L=new LNode;
L->next=NULL;
cout <<"请输入头插法要插入的数据(9999表示结束):";
cin>>x;
while(x!=9999){ //输入9999表示结束
s=new LNode;
s->data=x;
s->next=L->next;
L->next=s;
cin>>x;
}
return L;
}
LinkList List_TailInsert(LinkList &L){ //尾插法创建单链表
L=new LNode;
int x;
LNode *s,*r=L; //r为表尾指针
cout <<"请输入尾插法要插入的数据(9999表示结束):";
cin>>x;
while(x!=9999){
s=new LNode;
s->data=x;
s->next=r->next;
r->next=s;
r=s;
cin>>x;
}
r->next=NULL; //尾指针指向空
return L;
}
bool ListInsert(LinkList &L,int i,int e){ //按位序插入(带头结点)
if(i<1)
return false;
LNode *p;
int j=0;
p=L;
while(p!=NULL && j<i-1){
p=p->next;
j++;
}
if(p==NULL) //i值不合法
return false;
LNode* s=new LNode;
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
LNode *GetElem(LinkList L, int i){ //按序号查找结点值
int j=1;
LNode *p=L->next; //第一个结点指针赋给p
if(i==0)
return L;
if(i<1)
return NULL;
while(p&&j<i){
p=p->next;
j++;
}
cout<<p->data<<endl;
return p;
}
LNode *LocateElem(LinkList L,int e){ //按值查找表结点
LNode *p=L->next;
int i=1;
while(p!=NULL&&p->data!=e){
p=p->next;
i++;
}
cout<<i<<endl;
return p;
}
LinkList DelElem(LinkList L,int i){ //删除结点
LNode *p=GetElem(L,i-1);
LNode *q;
q=p->next;
p->next=q->next;
free(q);
}
int Length(LinkList L){ //求表长
int len=0;
LNode *p=L;
while(p->next!=NULL){
p=p->next;
len++;
}
return len;
}
void *OutElem(LinkList &L){ //输出
LNode* p=L->next;
while(p!=NULL){
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
int main()
{
LinkList L=new LNode;
cout << "请选择创建单链表的方法:1.头插法;2.尾插法。"<<endl;
int n;
cin >> n;
if (n == 1)
List_HeaInsert(L); //头插法创建
else if (n == 2)
List_TailInsert(L); //尾插法创建
cout<<"输出单链表";
OutElem(L); //输出
cout<<"在第4个位置插入6"<<endl;
ListInsert(L,4,6); //在第4个位置插入6
OutElem(L); //输出
cout<<"查找链表的第2个元素并输出"<<endl;
GetElem(L,2); //查找链表的第2个元素
cout<<"查找链表中的元素8"<<endl;
LocateElem(L,8); //查找链表中的元素8
cout<<"查找链表中的第3个元素的值并删除"<<endl;
DelElem(L,3); //删除链表中的第3个元素
cout<<"输出单链表";
OutElem(L); //输出
cout<<"输出表长";
cout<<Length(L)<<endl; //输出表长
return 0;
}
数据结构-----单链表(头插法、尾插法、插入、删除、查询、遍历)
最新推荐文章于 2023-11-05 13:11:58 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)