feat: 添加 list 实现与测试,添加 stack 测试

This commit is contained in:
clzhao98 2024-07-28 14:53:08 +08:00
parent 8a80b3f8b9
commit d305d58e50
9 changed files with 186 additions and 43 deletions

3
.gitignore vendored
View File

@ -34,3 +34,6 @@ dist/
*.exe
*.out
*.app
build/
.cache

View File

@ -15,3 +15,4 @@ include_directories(
add_subdirectory(src)
add_subdirectory(include)
add_subdirectory(tests)

View File

@ -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
View 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__

View File

@ -1,6 +1,6 @@
## list library
## include
## list library
## include
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)

View File

@ -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
View 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
View 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
View 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;
}