#include<bits/stdc++.h>
using namespace std;
//带头节点的循环单链表
struct LNode{
int data;
LNode *next;
};
//初始化链表
void InitList(LNode *&L){
L=(LNode *)malloc(sizeof(LNode));
L->next=L;
}
//判断链表是否为空
void isEmpty(LNode * &L){
if(L->next==L)
cout<<"链表为空"<<endl;
else
cout<<"链表不空"<<endl;
}
//按位查找元素
LNode * GetElem(LNode * &L,int i){
int j=0;
LNode *p=L;
while(p->next!=L&&j<i){
p=p->next;
j++;
}
if(p->next==L&&j+1<i){
return NULL;
}
return p;
}
//按位插入元素
void ListInsert(LNode * &L,int i,int value){
if(i<1){
cout<<"插入位置不合法"<<endl;
return;
}
LNode *p=L,*t;
p=GetElem(p,i-1);
if(p==NULL){
cout<<"插入位置不合法"<<endl;
return;
}
t=(LNode *)malloc(sizeof(LNode));
t->data=value;
t->next=p->next;
p->next=t;
printf("%d插入成功\n",value);
}
//按位删除元素
void ListDelete(LNode *&L,int i){
if(i<1){
cout<<"删除位置不合法"<<endl;
return;
}
LNode *p=L;
p=GetElem(p,i-1);
if(p==NULL||p->next==L){
cout<<"删除位置不合法"<<endl;
return;
}
int value=p->next->data;
p->next=p->next->next;
printf("%d删除成功\n",value);
}
//按位修改元素
void ListUpdate(LNode *&L,int i,int value){
if(i<1){
cout<<"修改位置不合法"<<endl;
return;
}
LNode *p=L;
p=GetElem(p,i);
if(p==NULL){
cout<<"修改位置不合法"<<endl;
return;
}
p->data=value;
printf("第%d个节点的数据修改为:%d\n",i,value);
}
//遍历链表
void ListShow(LNode *&L){
LNode *p=L->next;
while(p!=L){
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
int main(){
LNode *L;
InitList(L); //初始化链表
isEmpty(L); //判断链表是否为空
ListInsert(L,1,5); //插入节点
ListInsert(L,2,6);
ListInsert(L,3,8);
ListInsert(L,2,2);
ListInsert(L,5,6);
ListInsert(L,1,9);
ListInsert(L,9,7);
ListShow(L); //遍历链表
ListDelete(L,1); //删除元素
ListDelete(L,5);
ListDelete(L,3);
ListDelete(L,9);
ListShow(L); //遍历链表
cout<<GetElem(L,1)->data<<endl; //查找元素
cout<<GetElem(L,2)->data<<endl;
cout<<GetElem(L,3)->data<<endl;
ListShow(L); //遍历链表
ListUpdate(L,1,6); //修改元素
ListUpdate(L,5,5);
ListUpdate(L,2,8);
ListUpdate(L,3,9);
ListShow(L); //遍历链表
return 0;
}
带头节点的循环单链表
最新推荐文章于 2024-07-25 02:49:15 发布