#include<iostream>
using namespace std;
class List
{
private:
typedef struct list
{
int data;
list *next;
}*PList;
PList head, last;//头和尾指针
public:
List()//初始化头和尾指针
{
head = new list;
head->next = NULL;
last = head;
}
void CreatList()
{
int n;
cout << "元素个数为" << endl;
cin >> n;
cout << "输入元素" << endl;
PList temp;//临时结点,用来数据的输入
for (int i = 0; i < n; ++i)
{
temp = new list;
cin>>temp->data;
last->next = temp;
last = temp;
}
last->next = NULL;
cout << "创建完成" << endl;
}
void OutPut()
{
cout << "结果为" << endl;
for (PList p = head->next; p; p = p->next)
cout << p->data << endl;
}
//升序插分
//先用临时变量p记录链表数据,断开数据与头指针的连接,
//若大于基准就用头插法插入该数据,再用q记录p的下一个防止链表丢失
void Division()//拆分
{
PList p = head->next;
PList q;
head->next = NULL;
last = head;
cout << "输入拆分的基准" << endl;
int x;
cin >> x;
while (p)
{
if (p->data < x)//头插法
{
q = p->next;
p->next = head->next;
head->next = p;
if (p->next == NULL)last = p;//第一次插入时记得尾指针要向后移
p = q;//令p=下一个要拆分的元素
}
else//尾插法
{
last->next = p;
last = p;
p = p->next;//因为尾插法p与下一个数据没有断开连接
}
}
last->next = NULL;
cout << "拆分后结果为" << endl;
OutPut();
}
};
int main()
{
List L;
L.CreatList();
L.OutPut();
L.Division();
}
C/C++单链表基准拆分
最新推荐文章于 2023-03-18 14:55:23 发布