c++实现链表的基本操作
来源:互联网 发布:淘宝古董钟表 编辑:程序博客网 时间:2024/06/05 10:58
学习数据结构课程时所写,本人代码能力有限,如有不妥,欢迎指点
#include <iostream>using namespace std;#define NO_FOUND 1struct Node{int data; // 数据类型可以改变,此程序中以int为例子Node* next;};typedef Node* List_Node;class List{public:List(); ~List();int getLength(); // 返回链表总结点个数void Init_List(); // 创建新链表void Print_List(); // 遍历输出链表List_Node GetNode(int i); // 返回第i个结点void Delete_Node(int i); // 删除第i个结点void Insert_Node(int x, int i); // 在链表的第i个结点之前插入值为x的元素int Locate_Elem(int e); // 查找数据e所在结点的位置,从1开始private:List_Node head;};List::List(){head = NULL;}void List::Init_List(){List_Node p, q;p = new Node;q = p;cout << "请输入几个数据(以-1表示结束):"<<endl;cin >> p->data;while (p->data != -1){if (head == NULL)head = p;elseq->next = p;q = p;p = new Node;/*cout << "请输入数据(以-1表示结束):" << endl;*/cin >> p->data;}q->next = NULL;delete p;}void List::Print_List(){cout << "所有数据如下:" << endl;List_Node p=head;while (p){cout<<p->data<<" ";p = p->next;}}List_Node List::GetNode(int i){List_Node p = head;int j = 1; // 标记head结点位置值为1while (p && j < i){p = p->next;j++;}if (!p||j>i) // 当p为空或i=0时return NULL;return p;}void List::Delete_Node(int i){if (i == 1) //当删除头结点时{head = head->next;return;}List_Node p = GetNode(i-1);List_Node q = p->next;p->next = q->next;delete q;}void List::Insert_Node(int x, int i){if (i == 1) // 在链表头部插一个结点{List_Node t = new Node;t->data = x;t->next = head;head = t;}else{List_Node p = GetNode(i-1); // 找到第i个结点的前驱List_Node temp = new Node;temp->data = x;temp->next = p->next;p->next = temp;}}List::~List(){List_Node p=head;while (p){head = p->next;delete p;p = head;}}int List::Locate_Elem(int e){List_Node p = head;int pos = 1;while (p != NULL){if (p->data == e)return pos;else{p = p->next;pos++;}}return NO_FOUND;}int List::getLength(){int cnt = 0;List_Node p = head;while (p != NULL){cnt++;p = p->next;}return cnt;}int main(){List l;l.Init_List();l.Print_List();cout <<endl<< "你要删除第几个结点?" << endl;int i;cin >> i;if (i > l.getLength()||i<1)cout << "删除失败!" << endl;else{l.Delete_Node(i);l.Print_List();}cout << endl<<"请输入想要插入元素的值和插入的位置:";int x,pos;cin >> x>>pos;l.Insert_Node(x, pos);l.Print_List();cout << endl << "请输入想要查找元素的值:";int t;cin >> t;if (l.Locate_Elem(t) == NO_FOUND)cout << "不存在这个元素" << endl;elsecout << "该元素在链表中处于第" << l.Locate_Elem(t) << "个" << endl;}
阅读全文
0 0
- 链表的基本操作(c链表实现)
- 链表的基本操作(c实现)
- C语言实现双向链表的基本操作
- C语言实现双向链表的基本操作
- c语言实现静态链表的基本操作
- c语言实现循环链表的基本操作
- c语言实现双向链表的基本操作
- 栈的基本操作(c链表实现)
- C语言实现链表的基本操作
- C语言 链表的基本操作实现 源码
- 链表的基本操作函数算法(C/C++实现)
- 单向链表的C语言实现与基本操作
- C语言实现链表基本操作
- 线性链表基本操作实现(C/C++)
- 用C语言实现链栈的基本操作
- C语言实现链队列的基本操作
- 链栈的基本操作实现(c语言)
- 链表的基本操作(C++)
- PX4飞控之添加地面站参数
- Bellman-ford算法求解单源点最短路径初始版本
- java hashcode() 与 equals()
- Android 双屏异显
- Learining TypeScript (一) TypeScript 简介
- c++实现链表的基本操作
- 10分钟让你明白MySQL是如何利用索引的
- unity audio
- CSS:float还是inline-block?
- AOP 和 OOP
- 泛型转换(构造器完成model实例化)
- STM32中断(1中断优先级)
- JAVAWEB 面试题
- 58. Length of Last Word