链表实现
来源:互联网 发布:新装系统无法连接网络 编辑:程序博客网 时间:2024/06/07 20:10
LinkList.h
#pragma once #include<iostream>typedef struct Node{ int data; Node* next;}*NPoint;class LinkList{private: NPoint head; // 头指针public: LinkList(); ~LinkList(); bool Empty(); void Clear(); void AddData(int value); //链表后面添加 void InsertAfter(int key, int value); //在key后面插入value NPoint FindData(int key); void DeleteData(int key); int ListLength(); //链表长度 void PrintList();//输出链表};LinkList::LinkList(){ head = (NPoint)malloc(sizeof(Node)); head->next = NULL;}LinkList::~LinkList(){ Clear(); free(head);}//判空bool LinkList::Empty(){ if (head->next != NULL) return false; return true;}//清空 只剩下头指针void LinkList::Clear(){ NPoint deleteP; //这些多余的局部指针变量会在作用域结束后自动被回收 因为指针本身放在栈中 而其指向的内容是放在堆中 NPoint p = head->next; head->next = NULL; while (p) { deleteP = p; //这里必须先用一个指针指向要删除的当前指针 不然删除后再做 p=p->next 会报错 p = p->next; free(deleteP); }}//添加void LinkList::AddData(int value){ NPoint node = (NPoint)malloc(sizeof(Node)); node->data = value; node->next = NULL; NPoint p = head; while (p->next) p = p->next; p->next = node;}//在key后面插入valuevoid LinkList::InsertAfter(int key, int value){ NPoint node = (NPoint)malloc(sizeof(Node)); node->data = value; NPoint p = head; while (p->next && p->next->data != key) p = p->next; node->next = p->next->next; p->next->next = node; //使用以下两句就是在key之前插入value //node->next = p->next; //p->next = node;}//查找NPoint LinkList::FindData(int key){ NPoint p = head->next; while (p && p->data != key) p = p->next; return p;}//删除void LinkList::DeleteData(int key){ NPoint p = head; while (p->next && p->next->data != key) p = p->next; if (p) { NPoint deleteP = p->next; p->next = deleteP->next; free(deleteP); }}//链表长度int LinkList::ListLength(){ int length = 0; NPoint p = head->next; while (p) { p = p->next; length++; } return length;}//输出链表void LinkList::PrintList(){ if (Empty()) std::cout << "List Empty!\n"; else { NPoint p = head->next; while (p) { std::cout << p->data << " "; p = p->next; } std::cout << "\n"; }}
LinkListTest.cpp
#include"LinkList.h"#include<iostream>using namespace std;int main(){ LinkList* L = new LinkList(); cout << L->ListLength() << endl; L->PrintList(); L->AddData(5); L->InsertAfter(5, 2); L->PrintList(); L->InsertAfter(5, 3); L->PrintList(); L->DeleteData(5); L->PrintList(); cout << L->ListLength() << endl; delete L; return 0;}
0 0
- Java栈实现:数组实现和链表实现
- C++实现队列--数组实现和链表实现
- C++实现队列--数组实现和链表实现
- 队列的实现--链表实现
- Josephus排列-红黑树实现-链表实现
- 实现循环链表(js实现)
- 链表实现队列 C++实现
- 栈实现队列,链表实现栈
- stack 底层简单实现 链表实现
- Java实现 链表实现队列
- 栈模型的实现--链表实现
- 链表的实现
- C#实现链表
- 实现双向链表
- JAVA实现链表
- 双向链表实现
- Java实现链表
- 链表实现
- 我的threejs学习笔记(四)——dat.gui函数
- Mysql的日期时间函数
- MinGW安装及使用
- 计算机视觉基础5——本质矩阵与基本矩阵(Essential and Fundamental Matrices)
- 开闭原则
- 链表实现
- 怎么找到自己热爱的事业?
- ubuntu下Keras中神经网络可视化模块keras.utils.visualize_util安装配置方法
- 机器学习笔记(2)----“没有免费的午餐”定理
- 四大组件 广播机制之Broadcast
- Permission denied: user=dr.who, access=READ_EXECUTE, inode="/tmp":root:supergroup:drwx------
- springmvc-学习总结-注解
- 设计模式_简单工厂模式概述和使用
- 解决本地访问MySql数据库出现“Can't get hostname for your address”错误