当前位置: 首页 > news >正文

A : DS单链表--类实现

Description

用C++语言和类实现单链表,含头结点

属性包括:data数据域、next指针域

操作包括:插入、删除、查找

注意:单链表不是数组,所以位置从1开始对应首结点,头结点不放数据

类定义参考

#include<iostream>
using namespace std;
#define ok 0
#define error -1// 链表结点定义
class ListNode
{
public:int data;ListNode *next;ListNode() {next = NULL;}
};
// 带头结点的单链表类定义
class LinkList
{
public:ListNode *head;int len;// 操作定义LinkList();~LinkList();ListNode *LL_index(int i);      // 返回第i个结点的指针,如果不存在返回NULLint LL_get(int i);              // 获取第i个元素的数据int LL_insert(int i, int item); // 把数值item插入第i个位置int LL_del(int i);              // 删除第i个结点void LL_display();              // 输出单链表的内容
};
LinkList::LinkList()
{head = new ListNode();len = 0;
}
LinkList::~LinkList()
{ListNode *p, *q;p = head;while(p != NULL){q = p;p = p->next;delete q;}len = 0;head = NULL;
}
void LinkList::LL_display()
{ListNode *p;p = head->next;while(p){cout << p->data << ' ';p = p->next;}cout << endl;
}

Input

  • 第1行先输入n表示有n个数据,接着输入n个数据
  • 第2行输入要插入的位置和新数据
  • 第3行输入要插入的位置和新数据
  • 第4行输入要删除的位置
  • 第5行输入要删除的位置
  • 第6行输入要查找的位置
  • 第7行输入要查找的位置

Output

数据之间用空格隔开,

第1行输出创建后的单链表的数据

每成功执行一次操作(插入或删除),输出执行后的单链表数据

每成功执行一次查找,输出查找到的数据

如果执行操作失败(包括插入、删除、查找等失败),输出字符串error,不必输出单链表

Sample

#0
Input

Copy

6 11 22 33 44 55 66
3 777
1 888
1
11
0
5
Output

Copy

11 22 33 44 55 66 
11 22 777 33 44 55 66 
888 11 22 777 33 44 55 66 
11 22 777 33 44 55 66 
error
error
44
#include<iostream>
using namespace std;
#define ok 0
#define error -1// 链表结点定义
class ListNode
{
public:int data;ListNode* next;ListNode() { next = NULL; }
};
// 带头结点的单链表类定义
class LinkList
{
public:ListNode* head;int len;// 操作定义LinkList();~LinkList();ListNode* LL_index(int i);      // 返回第i个结点的指针,如果不存在返回NULLint LL_get(int i);              // 获取第i个元素的数据int LL_insert(int i, int item); // 把数值item插入第i个位置int LL_del(int i);              // 删除第i个结点void LL_display();              // 输出单链表的内容
};
LinkList::LinkList()
{head = new ListNode();len = 0;
}
LinkList::~LinkList()
{ListNode* p, * q;p = head;while (p != NULL){q = p;p = p->next;delete q;}len = 0;head = NULL;
}
void LinkList::LL_display()
{ListNode* p;p = head->next;while (p){cout << p->data << ' ';p = p->next;}cout << endl;
}// 返回第i个结点的指针,如果不存在返回NULL  找链表第i个结点
ListNode* LinkList::LL_index(int i)
{int j = 0;ListNode* p = head;//指向头指针while (p && j < i)//遍历{p = p->next;j++;}if (!p) return NULL;else return p;
}//获得数据 获取第i个元素的数据
int LinkList::LL_get(int i)
{if (i <= 0 || i > len) return error;int j = 0;ListNode* p = head;//指向头指针 while (p && j < i)//遍历{p = p->next;j++;}if (!p) return error;else return p->data;
}//插入
int LinkList::LL_insert(int i, int item)
{//判断存在if (i <= 0 || i > len + 1) return error;ListNode* p, * s;p = LL_index(i - 1);//p是第i-1的结点s = new ListNode();//动态创建一个名为ListNode的新节点,并将其地址赋值给指针变量s。s->data = item;//s数据赋值s->next = p->next;//s的下一位 等于 p的下一位  s过后是i 也就是s指向链表第i位p->next = s;//p指向s p的下一位是s  p过后是s len++;return ok;
}//删除
int LinkList::LL_del(int i)
{if (i <= 0 || i > len) return error;ListNode* p, * s;p = LL_index(i - 1);//p是链表第i-1s = p->next;//s是p的下一位 s是ip->next = s->next;//p的下一位 是s的下一位   p过后是i+1//这样子就跳过了idelete s;len--;return ok;
}int main()
{int n,m;LinkList mylist;cin >> n;for (int i = 1; i <= n; i++){cin >> m;mylist.LL_insert(i, m);//插入}//输出mylist.LL_display();//第2行输入要插入的位置和新数据cin >> n >> m;if( mylist.LL_insert(n, m)!= -1)mylist.LL_display();else cout << "error" << endl;//第2行输入要插入的位置和新数据cin >> n >> m;if (mylist.LL_insert(n, m) != -1)mylist.LL_display();else cout << "error" << endl;//第4行输入要删除的位置cin >> n;if (mylist.LL_del(n) != -1)mylist.LL_display();else cout << "error" << endl;//第4行输入要删除的位置cin >> n;if (mylist.LL_del(n) != -1)mylist.LL_display();else cout << "error" << endl;//第6行输入要查找的位置cin >> n;if (mylist.LL_get(n) != -1)cout << mylist.LL_get(n);else cout << "error" << endl;//第6行输入要查找的位置cin >> n;if (mylist.LL_get(n) != -1)cout << mylist.LL_get(n);else cout << "error" << endl;}

http://www.lryc.cn/news/183370.html

相关文章:

  • React Hooks —— ref hooks
  • 泛型与Gson解析
  • c++使用ifstream和ofstream报错:不允许使用不完整的类型
  • 调试器通用波形显示工具
  • Linux中getopt函数、optind等变量使用详解
  • RDP协议流程详解(二)Basic Settings Exchange 阶段
  • 实时人脸五观检测:基于libfacedetection(CNN模型)
  • 图像和视频上传平台Share Me
  • JavaScript 在前端开发中有什么应用?
  • 【沐风老师】推荐2023年3DMAX的10个最佳插件!
  • 【visual studio 小技巧】项目属性->生成->事件
  • 每日一题 279完全平方数(完全背包)
  • 创意中秋与国庆贺卡 - 用代码为节日增添喜悦
  • 专业综合课程设计 - 优阅书城项目(第一版)
  • 【剑指Offer】13.机器人的运动范围
  • 【Qt基础篇】信号和槽
  • .netCore用DispatchProxy实现动态代理
  • 好奇喵 | Tor浏览器——访问.onion网址,揭开Dark Web的神秘面纱
  • Maven 中引用其他项目jar包出现BOOT-INF问题
  • PHP框架面试题
  • 如何清理C盘
  • 计算机网络基础知识
  • Go语言面经进阶10问
  • 大厂真题:【DP】米哈游2023秋招-米小游与魔法少女-奇运
  • 后端面经学习自测(一)
  • win10、win11安装Ubuntu 22.04
  • golang gin框架1——简单案例以及api版本控制
  • Redisson—分布式对象
  • alsa pcm接口之在unix环境的传输方法
  • 小谈设计模式(20)—组合模式