C++链表排序及增删改

Posted 软件工程Code

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++链表排序及增删改相关的知识,希望对你有一定的参考价值。


C++实现链表的基本操作


链表是数据结构中的一个重要类型





顺序表储存

优点它可以从中直接找到你要操作的数据,cpu缓存利用率高。

缺点顺序表只能储存在一段连续的内存空间里。


链表储存

优点:而采用链表的存储就大大提高了内存的利用率。

缺点:不支持随机查找。


C++链表排序及增删改

C++链表排序及增删改C++链表排序及增删改

C++链表排序及增删改



#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++链表排序及增删改的主要内容,如果未能解决你的问题,请参考以下文章

c++链表归并排序的迭代版本

C++每日一练16.合并两个排序的链表

c语言 建立一个链表,实现增删改查

如何在双向链表 C++ 上使用插入排序?

C++ 对向量或链表进行排序

C++ 排序奇升偶降链表