一、实验题目
二、实验代码
# include "bits/stdc++.h"
using namespace std;
//定义单链表的数据结构
typedef struct LNode
{
int data;
struct LNode *next;
}LNode, *LinkList;
//单链表的初始化操作
bool InitLinkList(LinkList &L)
{
L = (LNode *)malloc(sizeof(LNode));
if(L == NULL)
return false;
L->next = NULL;
return true;
}
//单链表的按位序插入操作
bool InsertLinkList(LinkList &L, int i, int element)
{
if(i<1)
return false;
int j = 0; //记录遍历到哪一个位置
LNode *p;
p = L;
while (p != NULL && j < i-1)
{
p = p->next;
++j;
}
if(p == NULL)
return false;
LNode *new_num = (LNode *)malloc(sizeof(LNode));
new_num->data = element;
new_num->next = p->next;
p->next = new_num;
return true;
}
//单链表的按位序删除操作
bool List_Delete(LinkList &L, int i)
{
if(i<1)
return false;
//=============将指针p定位到位序为i-1的位置===========
LNode *p;
int j = 0;
p = L;
while (p != NULL && j < i-1)
{
p = p->next;
++j;
}
if(p == NULL)
return false;
if(p->next == NULL)
return false;
//==================================================
LNode *q = p->next;
p->next = q->next;
free(q);
return true;
}
//单链表的打印输出
void Print_List(LinkList L)
{
while (L->next != NULL)
{
L = L->next;
cout<< L->data <<" ";
}
cout<<endl;
}
//得到第i个节点的值
int GetElem(LinkList L, int i)
{
if(i<0)
return false;
LNode *p;
int j = 0;
p = L;
while (p != NULL && j < i)
{
p = p->next;
++j;
}
return p->data;
}
//带头结点的链表的长度,这个长度不包括头结点
int Length(LinkList L)
{
int len = 0;
LNode *p = L;
while (p->next != NULL)
{
p = p->next;
len++;
}
return len;
}
//单链表删除mink到maxk之间的元素
bool Delete_RangeElem(LinkList &L, int mink, int maxk)
{
if(mink > maxk)
return false;
int link_min=0;
int link_max=0; //分别记录在mink和maxk区间的元素下标区间
LNode *p = L;
LNode *q = L;
//由于定义的单链表是递增的,所以先找到大于mink的元素
while ((p->next->data) < mink)
{
p = p->next;
link_min++;
}
link_min++;
while ((q->next->data) < maxk)
{
q = q->next;
link_max++;
}
link_max++;
//开始删除区间元素
LinkList L1;
InitLinkList(L1);
for (int i = 1; i <= (link_max-link_min+1); i++)
{
InsertLinkList(L1, i, GetElem(L, link_min+i-1));
}
cout<<"The single linked list after deletion is:"<<endl;
Print_List(L1);
return true;
}
int main()
{
LinkList L;
InitLinkList(L);
int lengh_link;
cout<<"Please enter the length of linked list:";
cin>>lengh_link;
cout<<"Please enter element of the linked list"<<endl;
for (int i = 0; i < lengh_link; i++)
{
int elem;
cin>>elem;
InsertLinkList(L, i+1, elem);
}
cout<<"The link list is:"<<endl;
Print_List(L);
int mink,maxk;
cout<<"Please enter the value of mink and maxk:";
cin>>mink>>maxk;
Delete_RangeElem(L, mink, maxk);
return 0;
}
三、运行结果