IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 单链表项目 -> 正文阅读

[数据结构与算法]单链表项目

#include<iostream>
#include<stdlib.h>
using namespace std;


typedef int elemtype;
typedef int status;
typedef struct node
{
?? ?elemtype elem;
?? ?node* next;
}lnode ,*linklist;

void menu1();//申明链表菜单函数

status initiallist(linklist& l)
{
?? ?l = new lnode;
?? ?if (l != NULL)
?? ?{
?? ??? ?l->next = NULL;//头结点
?? ??? ?cout << "初始化成功" << endl;
?? ??? ?return true;
?? ?}
?? ?else
?? ??? ?cout << "初始化失败" << endl;
?? ?return false;
}


void headinsert(linklist &l,int n)
{
?? ?int t = 1;
?? ?for (t; t <= n; t++)
?? ?{
?? ??? ?cout << "请输入第" << t << "个数据" << endl;
?? ??? ?linklist p = new lnode;
?? ??? ?cin >> p->elem;
?? ??? ?p->next = l->next;
?? ??? ?l->next = p;
?? ?}
}//头插法建立

void rearinsert(linklist& l, int n)
{
?? ?int t = 1;
?? ?linklist q;
?? ?q = l;
?? ?for (t; t <= n; t++)
?? ?{
?? ??? ?cout << "请输入第" << t << "个数据" << endl;
?? ??? ?linklist p = new lnode;
?? ??? ?cin >> p->elem;
?? ??? ?q->next = p;
?? ??? ?q = p;
?? ?}
?? ?q->next = NULL;
}//尾插法建立链表


void listoutput(linklist& l)
{
?? ?int t = 1;
?? ?linklist p;
?? ?p = l->next;
?? ?while (p != NULL)
?? ?{
?? ??? ?cout << "第" << t << "个位置的数据为" << p->elem << endl;
?? ??? ?t++;
?? ??? ?p = p->next;
?? ?}
}//输出链表


int ?length(linklist& l)
{
?? ?linklist p;
?? ?int t = 0;
?? ?p = l->next;
?? ?while (p != NULL)
?? ?{
?? ??? ?p = p->next;
?? ??? ?t++;
?? ?}
?? ?return t;
}//链表长度

void insertlist(linklist& l, linklist& p, int i)
{
?? ?if (i < 1 || i>(length(l) + 1))
?? ?{
?? ??? ?cout << "插入位置错误" << endl;
?? ?}
?? ?else
?? ?{
?? ??? ?int j;
?? ??? ?linklist q;
?? ??? ?q = l;
?? ??? ?for (j = 1; j < i; j++)
?? ??? ?{
?? ??? ??? ?q = q->next;
?? ??? ?}

?? ??? ?p->next = q->next;
?? ??? ?q->next = p;
?? ??? ?listoutput(l);
?? ?}
}//链表插入

void deletelist(linklist& l, int i)
{
?? ?if (i<1 || i>length(l))
?? ?{
?? ??? ?cout << "删除位置错误" << endl;
?? ?}
?? ?else
?? ?{
?? ??? ?int j;
?? ??? ?linklist q;
?? ??? ?linklist t;
?? ??? ?q = l;
?? ??? ?for (j = 1; j < i; j++)
?? ??? ?{
?? ??? ??? ?q = q->next;
?? ??? ?}
?? ??? ?t = q->next;
?? ??? ?q->next = t->next;
?? ??? ?delete t;
?? ??? ?listoutput(l);
?? ?}
}//链表删除

void listsort(linklist& l)
{
?? ?int t;
?? ?linklist p, q;
?? ?p = l->next;
?? ?while (p != NULL)
?? ?{
?? ??? ?q = p->next;
?? ??? ?while (q != NULL)
?? ??? ?{
?? ??? ??? ?if (p->elem > q->elem)
?? ??? ??? ?{
?? ??? ??? ??? ?t = q->elem;
?? ??? ??? ??? ?q->elem = p->elem;
?? ??? ??? ??? ?p->elem = t;
?? ??? ??? ?}
?? ??? ??? ?else
?? ??? ??? ??? ?q = q->next;
?? ??? ?}
?? ??? ?p = p->next;
?? ?}
}//链表排序

void sortinsert(linklist& l,linklist ?&t)
{
?? ?linklist p, q,s;
?? ?p = l->next;
?? ?q = p->next;
?? ?s = l->next;
?? ?while (s->next != NULL)
?? ?{
?? ??? ?s = s->next;
?? ?}

?? ?if (t->elem > s->elem)
?? ?{
?? ??? ?t->next = s->next;
?? ??? ?s->next = t;
?? ?}
?? ?else?
?? ?if (t->elem < l->next->elem)
?? ?{
?? ??? ?t->next = l->next;
?? ??? ?l->next = t;
?? ?}//头部插入
?? ?else
?? ?{
?? ??? ?while (q != 0)
?? ??? ?{
?? ??? ??? ?if (p->elem <= t->elem && t->elem <= q->elem)
?? ??? ??? ?{
?? ??? ??? ??? ?t->next = p->next;
?? ??? ??? ??? ?p->next = t;
?? ??? ??? ??? ?break;
?? ??? ??? ?}
?? ??? ??? ?else
?? ??? ??? ?{
?? ??? ??? ??? ?p = q;
?? ??? ??? ??? ?q = q->next;
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?listoutput(l);
}//有序链表排序插入

int main()
{
?? ?menu1();
?? ?return 0;
}


void menu1()
{
?? ?int t;
?? ?int m;
?? ?linklist l;
?? ?linklist n;
?? ?while (1)
?? ?{
?? ?
?? ??? ?cout << "根据所做操作选择以下数字符号" << endl;
?? ??? ?cout << endl << endl;
?? ??? ?cout << "8:单链表的建立" << endl;
?? ??? ?cout << endl;
?? ??? ?cout << "1:头插法创建单链表" << '\t' << "2:尾插法创建单链表" << '\t' << "3:执行插入操作" << endl;
?? ??? ?cout << "4:执行删除操作" << '\t' <<'\t' << "5:执行输出操作" << '\t' << '\t' << "6:执行排序操作" << endl;
?? ??? ?cout << "7:执行有序表的插入操作" << '\t' << "0:退出" << ? endl;
?? ??? ?cin >> t;
?? ??? ?switch (t)
?? ??? ?{

?? ??? ?case 1:
?? ??? ??? ?cout << "请输入要输入数据个数" << endl;
?? ??? ??? ?cin >> m;
?? ??? ??? ?headinsert(l, m);
?? ??? ??? ?system("pause");
?? ??? ??? ?system("cls");
?? ??? ??? ?break;
?? ??? ?case 2:
?? ??? ? ? ?cout << "请输入要输入数据个数" << endl;
?? ??? ??? ?cin >> m;
?? ??? ??? ?rearinsert(l, m);
?? ??? ??? ?system("pause");
?? ??? ??? ?system("cls");
?? ??? ??? ?break;
?? ??? ?case 3:
?? ??? ??? ?n = new lnode;
?? ??? ??? ?cout << "请输入插入的数据" << endl;
?? ??? ??? ?cin >> n->elem;
?? ??? ??? ?cout << "请输入插入的位置" << endl;
?? ??? ??? ?cin >> m;
?? ??? ??? ?insertlist(l, n, m);
?? ??? ??? ?system("pause");
?? ??? ??? ?system("cls");
?? ??? ??? ?break;
?? ??? ?case 4:
?? ??? ??? ?cout << "请输入删除元素的位置" << endl;
?? ??? ??? ?cin >> m;
?? ??? ??? ?deletelist(l, m);
?? ??? ??? ?system("pause");
?? ??? ??? ?system("cls");
?? ??? ??? ?break;
?? ??? ?case 5:
?? ??? ??? ?listoutput(l);
?? ??? ??? ?system("pause");
?? ??? ??? ?system("cls");
?? ??? ??? ?break;
?? ??? ?case 6:
?? ??? ??? ?listsort(l);
?? ??? ??? ?system("pause");
?? ??? ??? ?system("cls");
?? ??? ??? ?break;
?? ??? ?case 7:
?? ??? ??? ?n = new lnode;
?? ??? ??? ?cout << "请输入插入的数据" << endl;
?? ??? ??? ?cin >> n->elem;
?? ??? ??? ?sortinsert(l,n);
?? ??? ??? ?system("pause");
?? ??? ??? ?system("cls");
?? ??? ??? ?break;
?? ??? ?case 8:
?? ??? ??? ?initiallist(l);
?? ??? ??? ?system("pause");
?? ??? ??? ?system("cls");
?? ??? ??? ?break;
?? ??? ?case 0:
?? ??? ??? ?cout << endl << endl;
?? ??? ??? ?cout << '\t' << "谢谢使用" << '\t' << "欢迎下次再来" << endl;
?? ??? ??? ?return;
?? ??? ?default:
?? ??? ??? ?cout << "输入有错请重新输入" << endl;
?? ??? ??? ?system("pause");
?? ??? ??? ?system("cls");
?? ??? ??? ?break;
?? ? ?}
?? ?}
}

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-14 23:11:55  更:2021-07-14 23:14:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 16:40:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码