C++链表排序及增删改
Posted 软件工程Code
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++链表排序及增删改相关的知识,希望对你有一定的参考价值。
C++实现链表的基本操作
链表是数据结构中的一个重要类型
顺序表储存
优点:它可以从中直接找到你要操作的数据,cpu缓存利用率高。
缺点:顺序表只能储存在一段连续的内存空间里。
链表储存
优点:而采用链表的存储就大大提高了内存的利用率。
缺点:不支持随机查找。
#include "stdafx.h"
#include<iostream>
#include<time.h>
#include<conio.h> //提供getch函数
using namespace std;
//随机数产生
void Random_num();
//输出链表
void Put_Link_List();
//链表排序
void Sort_Link_list();
//菜单
bool Menu();
//增加数据
void Add_Data();
//删除数据
void Delete_Data();
//修改数据
void Modify_Data();
//释放指针
void Free();
//链表结点
class Node
{
public:
int data;
Node *next;
}*p, *p1, *head;
//随机数产生
void Random_num()
{
srand(time(NULL));
p = (Node*)malloc(sizeof(Node));
head = p; //储存头结点
p->data = rand() % 100;
for (int i = 1; i < 10; i++)
{
p = (Node*)malloc(sizeof(Node)); //创建新结点
p->data = rand() % 100;
}
p->next = NULL;
}
//输出链表
void Put_Link_List()
{
system("cls");
int i = 0;
p = head;
{
cout << i++ << ":" << p->data << endl;
p = p->next;
}
cout << i << ":" << p->data << endl; //输出最后一个结点的数据
}
//链表排序
void Sort_Link_list()
{
int MAX; //用于传递数值
cout << endl << "链表排序 " << endl;
system("pause");
p1 = head;
for (int i = 0; i < 10; i++) //↓ 起泡排序开始
{
p = head;
for (int i = 0; i < 10; i++)
{
if (p1->data < p->data)
{
MAX = p->data;
p->data = p1->data;
p1->data = MAX;
}
p = p->next;
}
p1 = p1->next;
} //↑ 起泡排序结束
}
//菜单
bool Menu()
{
cout << "┏──────────────┓" << endl
<< "│ 1:增加数据 │" << endl
<< "│ 2:删除数据 │" << endl
<< "│ 3:修改数据 │" << endl
<< "│ 4: 退出 │" << endl
<< "┗──────────────┛" << endl;
bool ret = true;
switch (getch())
{
case '1':
Add_Data(); //增加数据
break;
case '2':
Delete_Data(); //删除数据
break;
case '3':
Modify_Data(); //修改数据
break;
case '4':
ret = false; //修改数据
default:
break;
}
return ret;
}
//增加数据
void Add_Data()
{
int site_num; //增加数据的位置
int data; //增加的数据
cout << "输入增加的位置:" << endl;
cin >> site_num;
cout << "输入增加的数据:" << endl;
cin >> data;
p = head;
{
if (site_num - 1 == i)
break;
p = p->next;
}
p1 = (Node*)malloc(sizeof(Node)); //为新增的数据创建结点
p1->data = data; //储存数据
site = p->next; //↓
p1->next = site; //↑
}
//删除数据
void Delete_Data()
{
int site_num; //删除数据的位置
cout << "输入删除的位置:" << endl;
cin >> site_num;
p = head;
for (int i = 0; ; i++)
{
if (site_num - 1 == i)
break;
p = p->next;
}
site = p->next; //跟增加结点的同理,去掉一个结点,就是删除
p->next = site->next;
free(site); //释放删除结点的空间
}
//修改数据
void Modify_Data()
{
int site_num; //修改数据的位置
int data; //修改的数据
cout << "输入修改的位置:" << endl;
cin >> site_num;
cout << "输入修改的数据:" << endl;
cin >> data;
p = head;
for (int i = 0; ; i++)
{
if (site_num == i)
break;
p = p->next;
}
p->data = data;
}
//释放指针
void Free()
{
for (int i = 0; p->next != NULL; i++)
{
p1 = p;
p = p->next;
free(p1);
}
free(p);
}
int main()
{
Random_num(); //产生随机数赋值
Put_Link_List(); //输出随机数的链表
Sort_Link_list(); //链表排序
Put_Link_List(); //输出排序后的链表
while (Menu()) //菜单
{
Put_Link_List(); //输出修改后的链表
}
Free(); //释放指针
system("pause");
return 0;
}
我们会不断努力,感谢你的支持!!!
以上是关于C++链表排序及增删改的主要内容,如果未能解决你的问题,请参考以下文章