学习数据结构时候,从线性表到链表,到队列和栈,后面的数据结构往往需要用到前面的数据结构,将一门课的实验统一为一个数据结构大项目有助于我们更好的理解。
例子在stitch001/ProjectDS (github.com)
项目架构
主解决方案 ProjectDS
新建空项目,命名为 Main,解决方案名称 命名为 ProjectDS
新建完成后,应该有一个项目
启动项目 Main
在启动项目中,添加 Main.cpp 编写启动代码
#include <iostream>
using namespace std;
int main() {
cout << "first" << endl;
}
子项目 链表
在ProjectDS中添加静态类库,命名为 LinkedListLib。右键解决方案ProjectDS -> 添加新建项目 C++/Windows/静态库 创建完成后,右键头文件,添加头文件,定义我们的数据结构:数据和算法,和最重要的访问的函数
inkedlisthead.h
struct ListNode {
int val;
ListNode* next;
};
typedef ListNode* LinkedList;
void LinkedListTest();
LinkedList createLinkedList(int arr[]);
void traverse(LinkedList);
Main项目中 添加引用
勾上
LinkedListLib在Main.cpp中 添加头文件 #include "../LinkedListLib/linkedlisthead.h" main函数中调用LinkedListLib项目的入口函数LinkedListTest();
main.cpp 添加到这里
cout << "first" << endl;
LinkedListTest(); //当前学习的数据结构
linkedlisthead.h 定义数据和函数声明
struct ListNode {
int val;
ListNode* next;
};
typedef ListNode* LinkedList;
void LinkedListTest();
LinkedList createLinkedList(int arr[], int size);
void traverse(LinkedList);
linkedlisthead.cpp 定义函数的实现
#include "linkedlisthead.h"
#include <stdlib.h>
#include <iostream>
using namespace std;
void LinkedListTest()
{
int arr[] = {1,2,3,4,5};
int size = sizeof(arr) / sizeof(int);
auto head = createLinkedList(arr, size);
traverse(head);
return;
}
void traverse(LinkedList head) {
auto p = head->next;
while (p != NULL) {
cout << p->val << "----";
p = p->next;
}
}
LinkedList createLinkedList(int arr[],int size)
{
LinkedList head = (ListNode*)malloc(sizeof(ListNode));
head->next = NULL;
head->val = -1;
for (int i = size - 1; i >= 0; i--) {
ListNode* lt = (ListNode*)malloc(sizeof(ListNode));
lt->val = arr[i];
lt->next = head->next;
head->next = lt;
}
return head;
}