c++链表的简单操作
来源:互联网 发布:网络分销合作协议书 编辑:程序博客网 时间:2024/06/07 18:00
代码自用
#include <iostream> #include <stdlib.h> using namespace std; class Node { public: int data; Node *pNext; }; //单向链表类 class LinkList { public: LinkList() { //头结点不参与计数 head = new Node; head->data = 0; head->pNext = NULL; } ~LinkList() { delete head; } void CreateLinkList(int n); //创建链表 void InsertNode(int position, int d); //在指定位置插入结点 void TraverseLinkList(); //遍历链表 bool IsEmpty(); //判断链表是否为空 int GetLength(); //链表长度 void DeleteNode(int position); //删除指定位置结点 void DeleteLinkList(); //删除整个链表 private: Node *head; }; void LinkList::CreateLinkList(int n) { if (n < 0) { cout << "输入结点个数错误!" << endl; exit(EXIT_FAILURE); } else { Node *pnew, *ptemp; ptemp = head; int i = n; while (n-- > 0) { pnew = new Node; cout << "输入第" << i - n << "个结点值:"; cin >> pnew->data; pnew->pNext = NULL; ptemp->pNext = pnew; ptemp = pnew; } } } //postion从1开始计数,到链表长度加1结束,头结点后的结点称为第一个结点 void LinkList::InsertNode(int position, int d) { if (position < 0 || position > GetLength() + 1) { cout << "输入位置错误!" << endl; exit(EXIT_FAILURE); } else { Node *pnew, *ptemp; ptemp = head; pnew = new Node; pnew->data = d; pnew->pNext = NULL; while (position-- > 1) ptemp = ptemp->pNext; pnew->pNext = ptemp->pNext; ptemp->pNext = pnew; } } void LinkList::TraverseLinkList() { Node *p = head->pNext; while (p != NULL) { cout << p->data << " "; p = p->pNext; } cout << endl; } bool LinkList::IsEmpty() { if (head->pNext == NULL) return true; else return false; } int LinkList::GetLength() { Node *p = head->pNext; int n = 0; while (p != NULL) { n++; p = p->pNext; } return n; } //position只能从1开始到链表长度结束 void LinkList::DeleteNode(int position) { if (position < 0 || position > GetLength()) { cout << "输入位置错误!" << endl; exit(EXIT_FAILURE); } else { Node *ptemp = head, *pdelete; while (position-- > 1) ptemp = ptemp->pNext; pdelete = ptemp->pNext; ptemp->pNext = pdelete->pNext; delete pdelete; pdelete = NULL; } } void LinkList::DeleteLinkList() { Node *pdelete = head->pNext, *ptemp; while(pdelete != NULL) { ptemp = pdelete->pNext; head->pNext = ptemp; delete pdelete; pdelete = ptemp; } } //测试函数 int main() { LinkList l; int position = 0, value = 0, n = 0; bool flag = false; cout << "请输入需要创建单向链表的结点个数:"; cin >> n; l.CreateLinkList(n); cout << "打印链表值如下:"; l.TraverseLinkList(); cout << "请输入插入结点的位置和值:"; cin >> position >> value; l.InsertNode(position, value); cout << "打印链表值如下:"; l.TraverseLinkList(); cout << "请输入要删除结点的位置:"; cin >> position; l.DeleteNode(position); cout << "打印链表值如下:"; l.TraverseLinkList(); l.DeleteLinkList(); flag = l.IsEmpty(); if (flag) cout << "删除链表成功!" << endl; else cout << "删除链表失败!" << endl; return 0; }
没图
阅读全文
0 0
- C语言 链表的简单操作
- 【C语言】链表的一些简单操作
- C语言 简单的 顺序表操作
- C简单的配置文件操作
- 简单链表的操作
- 链表的简单操作
- 链表的简单操作
- 链表的简单操作
- 链表的简单操作
- 链表的简单操作
- 链表的简单操作
- 链表的简单操作
- 用C写一个顺序表的简单操作
- C语言线性表的简单创建和操作
- 【数据结构与算法】(二) c 语言链表的简单操作
- 转载:C/MFC - 文本文件的简单操作
- C/C++简单的文件操作
- 简单的课程信息管理(文本文件操作,c++)
- 重定向输出流实现程序日志【20171115练习】
- 输出菱形
- unbuntu install chrome
- Boost智能指针——scoped_ptr
- 九九乘法表的实现
- c++链表的简单操作
- c++ stl map 的初始化问题
- JasperException异常
- hdu3461
- 管理进程,服务,终端命令
- 第四届福建省大学生程序设计竞赛 部分题解
- MySQL的between语句和in语句的区别
- HTML5 新语义元素的浏览器兼容问题
- java桃心