✨ feat: 添加 list 实现与测试,添加 stack 测试
This commit is contained in:
parent
8a80b3f8b9
commit
d305d58e50
3
.gitignore
vendored
3
.gitignore
vendored
@ -34,3 +34,6 @@ dist/
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
||||
|
||||
build/
|
||||
.cache
|
@ -15,3 +15,4 @@ include_directories(
|
||||
|
||||
add_subdirectory(src)
|
||||
add_subdirectory(include)
|
||||
add_subdirectory(tests)
|
@ -1,35 +1,42 @@
|
||||
/**
|
||||
* @file list.h
|
||||
* @author clzhao98 <clzhao98@outlook.com>
|
||||
* @brief
|
||||
* @version 0.1
|
||||
* @date 2024-07-28
|
||||
*
|
||||
* @copyright Copyright (c) 2024
|
||||
*
|
||||
*/
|
||||
#ifndef __LIST__H__
|
||||
#define __LIST__H__
|
||||
|
||||
|
||||
|
||||
#include <cstddef>
|
||||
struct Node {
|
||||
size_t data_p;
|
||||
Node *next;
|
||||
|
||||
struct ListNode {
|
||||
size_t val_;
|
||||
ListNode *next;
|
||||
ListNode(size_t val): val_(val), next(nullptr){} // 构造函数
|
||||
};
|
||||
|
||||
|
||||
class List {
|
||||
public:
|
||||
List();
|
||||
~List();
|
||||
void push_back(int data);
|
||||
void push_front(int data);
|
||||
void insert(int data, int index);
|
||||
size_t front() const;
|
||||
size_t back() const;
|
||||
void push_back(size_t val);
|
||||
void pop_back();
|
||||
void pop_front();
|
||||
void remove(int index);
|
||||
void print();
|
||||
int size();
|
||||
bool empty();
|
||||
void clear();
|
||||
int front();
|
||||
int back();
|
||||
|
||||
|
||||
size_t size() const;
|
||||
void dump() const;
|
||||
private:
|
||||
Node *head_;
|
||||
Node *tail_;
|
||||
int count_;
|
||||
|
||||
|
||||
ListNode *head_;
|
||||
ListNode *tail_;
|
||||
size_t size_;
|
||||
};
|
||||
|
||||
|
||||
#endif //!__LIST__H__
|
35
include/stack.h
Normal file
35
include/stack.h
Normal file
@ -0,0 +1,35 @@
|
||||
/**
|
||||
* @file stack.h
|
||||
* @author clzhao98 <clzhao98@outlook.com>
|
||||
* @brief
|
||||
* @version 0.1
|
||||
* @date 2024-07-28
|
||||
*
|
||||
* @copyright Copyright (c) 2024
|
||||
*
|
||||
*/
|
||||
#ifndef __STACK__H__
|
||||
#define __STACK__H__
|
||||
/**
|
||||
* @brief 先入先出
|
||||
*
|
||||
*/
|
||||
|
||||
#include <cstddef>
|
||||
class Stack
|
||||
{
|
||||
private:
|
||||
size_t capacity_;
|
||||
|
||||
public:
|
||||
Stack();
|
||||
~Stack();
|
||||
void push(size_t val);
|
||||
void pop();
|
||||
size_t top();
|
||||
bool empty();
|
||||
size_t size();
|
||||
};
|
||||
|
||||
|
||||
#endif //!__STACK__H__
|
@ -3,4 +3,4 @@
|
||||
|
||||
add_library(list STATIC)
|
||||
target_sources(list PRIVATE list.cpp)
|
||||
target_include_directories(list PUBLIC ${INCLUDE_DIR})
|
||||
target_include_directories(list PUBLIC ${INCLUDE_DIR}/include)
|
||||
|
77
src/list.cpp
77
src/list.cpp
@ -1,32 +1,71 @@
|
||||
#include "list.h"
|
||||
#include <cstddef>
|
||||
#include <iostream>
|
||||
|
||||
List::List(): head_(nullptr), tail_(nullptr), count_(0) {}
|
||||
List::List(): head_(nullptr), tail_(nullptr), size_(0) {}
|
||||
|
||||
List::~List() {
|
||||
clear();
|
||||
while (head_ != nullptr) {
|
||||
ListNode *tmp = head_;
|
||||
head_ = head_->next;
|
||||
delete tmp;
|
||||
}
|
||||
}
|
||||
|
||||
void List::push_back(int data) {
|
||||
Node *new_node = new Node;
|
||||
new_node->data_p = data;
|
||||
new_node->next = nullptr;
|
||||
size_t List::front() const {
|
||||
return head_->val_;
|
||||
}
|
||||
|
||||
size_t List::back() const {
|
||||
return tail_->val_;
|
||||
}
|
||||
|
||||
size_t List::size() const{
|
||||
return size_;
|
||||
}
|
||||
|
||||
void List::dump() const {
|
||||
ListNode *tmp = head_;
|
||||
for (int i = 0; i < size_; i++)
|
||||
{
|
||||
std::cout <<tmp->val_ << " ";
|
||||
tmp = tmp->next;
|
||||
if(tmp == nullptr){
|
||||
break;
|
||||
}
|
||||
}
|
||||
std::cout << std::endl;
|
||||
|
||||
}
|
||||
|
||||
void List::push_back(size_t val) {
|
||||
ListNode *node = new ListNode(val);
|
||||
if (head_ == nullptr) {
|
||||
head_ = new_node;
|
||||
tail_ = new_node;
|
||||
head_ = node;
|
||||
tail_ = node;
|
||||
} else {
|
||||
tail_->next = new_node;
|
||||
tail_ = new_node;
|
||||
tail_->next = node;
|
||||
tail_ = node;
|
||||
}
|
||||
count_++;
|
||||
size_++;
|
||||
}
|
||||
|
||||
void List::push_front(int data) {
|
||||
Node *new_node = new Node;
|
||||
new_node->data_p = data;
|
||||
new_node->next = head_;
|
||||
head_ = new_node;
|
||||
if (tail_ == nullptr) {
|
||||
tail_ = new_node;
|
||||
void List::pop_back() {
|
||||
if (head_ == nullptr) {
|
||||
return;
|
||||
}
|
||||
count_++;
|
||||
if (head_ == tail_) {
|
||||
delete head_;
|
||||
head_ = nullptr;
|
||||
tail_ = nullptr;
|
||||
} else {
|
||||
ListNode *tmp = head_;
|
||||
while (tmp->next != tail_) {
|
||||
tmp = tmp->next;
|
||||
}
|
||||
delete tail_;
|
||||
tail_ = tmp;
|
||||
tail_->next = nullptr;
|
||||
}
|
||||
size_--;
|
||||
}
|
||||
|
11
tests/CMakeLists.txt
Normal file
11
tests/CMakeLists.txt
Normal file
@ -0,0 +1,11 @@
|
||||
## 添加 list library
|
||||
## 设置 include
|
||||
|
||||
|
||||
add_executable(test-list test-list.cpp)
|
||||
target_link_libraries(test-list list)
|
||||
target_include_directories(test-list PRIVATE ${INCLUDE_DIR})
|
||||
|
||||
|
||||
add_executable(test-stack test-stack.cpp)
|
||||
|
26
tests/test-list.cpp
Normal file
26
tests/test-list.cpp
Normal file
@ -0,0 +1,26 @@
|
||||
#include "list.h"
|
||||
#include <iostream>
|
||||
|
||||
|
||||
void test(){
|
||||
List list;
|
||||
list.push_back(1);
|
||||
list.push_back(2);
|
||||
list.push_back(3);
|
||||
|
||||
std::cout << "First elecment:" << list.front() << std::endl;
|
||||
std::cout << "Last elecment:" << list.back() << std::endl;
|
||||
std::cout << "Size:" << list.size() << std::endl;
|
||||
std::cout << "List elements:" << std::endl;
|
||||
list.dump();
|
||||
list.pop_back();
|
||||
std::cout << "After pop_back:" << std::endl;
|
||||
list.dump();
|
||||
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
test();
|
||||
return 0;
|
||||
}
|
21
tests/test-stack.cpp
Normal file
21
tests/test-stack.cpp
Normal file
@ -0,0 +1,21 @@
|
||||
#include <iostream>
|
||||
#include <stack>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
std::stack<int> stack;
|
||||
stack.push(1);
|
||||
stack.push(2);
|
||||
stack.push(3);
|
||||
std::cout << "Current stack size: "<< stack.size() << std::endl;
|
||||
std::cout << "Stack is empty? "<< stack.empty() << std::endl;
|
||||
while (!stack.empty())
|
||||
{
|
||||
std::cout << stack.top() << " ";
|
||||
stack.pop();
|
||||
}
|
||||
std::cout << std::endl;
|
||||
|
||||
// system("pause");
|
||||
return 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user