Skip to content

Commit 80f729e

Browse files
author
tianqing.liang
committed
链表,链表实现栈,链表实现队列
1 parent b5f5c49 commit 80f729e

File tree

7 files changed

+254
-51
lines changed

7 files changed

+254
-51
lines changed

05LinkedList/LinkedList.dart

Lines changed: 122 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,143 @@
1-
class LinkedList<T>{
1+
class LinkedList<T> {
2+
_Node? _dummyHead;
3+
late int _size;
24

3-
late _Node _head;
4-
late int _size;
5+
LinkedList() {
6+
_dummyHead = new _Node.all(null,null);
7+
_size = 0;
8+
}
59

6-
LinkedList(){
7-
_head = new _Node.empty();
8-
_size = 0;
9-
}
10+
int getSize() {
11+
return _size;
12+
}
1013

11-
int getSize(){
12-
return _size;
13-
}
14+
bool isEmpty() {
15+
return _size == 0;
16+
}
1417

15-
bool isEmpty(){
16-
return _size == 0;
17-
}
18+
remove(int index){
19+
if (index < 0 || index > _size) {
20+
throw Exception("Remove Failed,Illegal index");
21+
}
22+
_Node? prev = _dummyHead;
23+
for(var i =0;i<index ;i++){
24+
prev = prev?.next;
25+
}
26+
_Node? retNode = prev!.next;
27+
prev.next = retNode!.next;
28+
retNode.next = null;
29+
_size --;
30+
return retNode.t;
31+
}
32+
33+
//从链表中删除第一个元素,返回删除元素
34+
T? removeFirst(){
35+
remove(0);
36+
}
37+
//从链表中删除第一个元素,返回删除元素
38+
T? removeLast(){
39+
remove(_size -1);
40+
}
1841

19-
addFirst(T t){
42+
43+
//在链表的index位置添加新的元素e
44+
add(int index, T t) {
45+
if (index < 0 || index > _size) {
46+
throw Exception("Add Failed,Illegal index");
47+
}
48+
// if(index == 0){
49+
// addFirst(t);
50+
// }else{
51+
_Node? prev = _dummyHead;
52+
for (var i = 0; i < index; i++) {
53+
prev = prev?.next;
54+
}
55+
_Node _node = new _Node.head(t);
56+
_node.next = prev?.next;
57+
prev?.next = _node;
58+
_size++;
59+
// }
60+
}
61+
62+
addLast(T t) {
63+
add(_size, t);
64+
}
65+
66+
addFirst(T t) {
2067
// _Node _node =new _Node.head(t);
2168
// _node.next = _head;
2269
// _head = _node;
70+
add(0, t);
71+
}
2372

24-
_head = new _Node.all(t, _head);
25-
_size++;
26-
}
73+
//获取链表第index位置的元素
74+
T get(int index){
75+
if (index < 0 || index > _size) {
76+
throw Exception("Get Failed,Illegal index");
77+
}
78+
_Node? cur = _dummyHead!.next;
79+
for(var i=0;i<index;i++){
80+
cur = cur!.next;
81+
}
82+
return cur!.t;
83+
}
2784

28-
//在链表的index位置添加新的元素e
29-
add(int index,T t){
30-
if(index<0||index>_size){
31-
throw Exception("Add Failed,Illegal index");
32-
}
33-
if(index == 0){
34-
addFirst(t);
35-
}else{
36-
_Node prev = _head;
37-
for(var i =0;i<index-1;i++){
38-
prev = prev.next;
39-
}
40-
_Node _node = new _Node.head(t);
41-
_node.next = prev.next;
42-
prev.next = _node;
43-
_size++;
85+
T getFirst(){
86+
return get(0);
87+
}
88+
T getLast(){
89+
return get(_size-1);
90+
}
91+
set(int index,T t){
92+
if (index < 0 || index > _size) {
93+
throw Exception("Set Failed,Illegal index");
94+
}
95+
_Node? cur = _dummyHead!.next;
96+
for(var i =0;i<index;i++){
97+
cur = cur!.next;
98+
}
99+
cur!.t= t;
100+
}
101+
102+
bool contains(T t){
103+
_Node? cur = _dummyHead!.next;
104+
for(var i =0;i<_size-1;i++){
105+
if(cur!.t.compareTo(t)){
106+
return true;
44107
}
45-
}
108+
cur = cur.next;
109+
}
110+
return false;
111+
}
46112

47-
addLast(T t){
48-
add(_size, t);
49-
}
113+
@override
114+
String toString() {
115+
StringBuffer res =new StringBuffer();
116+
for(_Node? cur = _dummyHead!.next ; cur != null ; cur = cur.next){
117+
res.write(cur);
118+
res.write("->");
119+
}
120+
res.write("NULL");
121+
return res.toString();
122+
}
50123
}
51124
//节点
52-
class _Node<T>{
53-
late _Node next;
54-
late T t;
125+
class _Node<T> {
126+
_Node? next;
55127

56-
_Node.empty();
128+
T? t;
57129

58-
_Node.all(this.t,this.next);
130+
_Node.empty();
59131

60-
factory _Node.head(T t){
61-
dynamic i ;
62-
var result = new _Node.all(t, i);
63-
return result;
64-
}
132+
_Node.all(this.t, this.next);
65133

66-
@override
134+
factory _Node.head(T t) {
135+
var result = new _Node.all(t, null);
136+
return result;
137+
}
138+
139+
@override
67140
String toString() {
68141
return t.toString();
69142
}
70-
}
143+
}

05LinkedList/LinkedListQueue.dart

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import 'Queue.dart';
2+
class LinkedListQueue implements Queue{
3+
@override
4+
dequeue() {
5+
// TODO: implement dequeue
6+
throw UnimplementedError();
7+
}
8+
9+
@override
10+
void enqueue(e) {
11+
// TODO: implement enqueue
12+
}
13+
14+
@override
15+
getFront() {
16+
// TODO: implement getFront
17+
throw UnimplementedError();
18+
}
19+
20+
@override
21+
int getSize() {
22+
// TODO: implement getSize
23+
throw UnimplementedError();
24+
}
25+
26+
@override
27+
bool isEmpty() {
28+
// TODO: implement isEmpty
29+
throw UnimplementedError();
30+
}
31+
32+
}
33+
34+
//节点
35+
class _Node<T> {
36+
_Node? next;
37+
38+
T? t;
39+
40+
_Node.empty();
41+
42+
_Node.all(this.t, this.next);
43+
44+
factory _Node.head(T t) {
45+
var result = new _Node.all(t, null);
46+
return result;
47+
}
48+
49+
@override
50+
String toString() {
51+
return t.toString();
52+
}
53+
}

05LinkedList/LinkedListStatck.dart

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import 'Stack.dart';
2+
import 'LinkedList.dart';
3+
4+
class LinkedListStack implements Stack{
5+
6+
LinkedList? _linkedList;
7+
8+
LinkedListStack(){
9+
_linkedList =new LinkedList();
10+
}
11+
12+
@override
13+
int getSize() {
14+
return _linkedList!.getSize();
15+
}
16+
17+
@override
18+
bool isEmpty() {
19+
return _linkedList!.isEmpty();
20+
}
21+
22+
@override
23+
peek() {
24+
return _linkedList!.getFirst();
25+
}
26+
27+
@override
28+
pop() {
29+
_linkedList!.removeFirst();
30+
}
31+
32+
@override
33+
void push(e) {
34+
_linkedList!.addFirst(e);
35+
}
36+
37+
@override
38+
String toString() {
39+
StringBuffer res = new StringBuffer();
40+
res.write("Stack:top ");
41+
res.write(_linkedList);
42+
return res.toString();
43+
}
44+
45+
}

05LinkedList/Queue.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
abstract class Queue<T>{
2+
int getSize();
3+
bool isEmpty();
4+
void enqueue(T e);
5+
T dequeue();
6+
T getFront();
7+
}

05LinkedList/Stack.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
abstract class Stack<T>{
2+
int getSize();
3+
bool isEmpty();
4+
void push(T e);
5+
T pop();
6+
T peek();
7+
}

05LinkedList/main.dart

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,23 @@
11
import 'LinkedList.dart';
2-
2+
import 'LinkedListStatck.dart';
33
void main(){
4+
LinkedList linkedList = new LinkedList();
5+
for(int i = 0 ; i < 5 ; i ++){
6+
linkedList.addFirst(i);
7+
print(linkedList);
8+
}
9+
linkedList.add(2, 666);
10+
print(linkedList);
11+
linkedList.remove(2);
12+
print(linkedList);
13+
linkedList.removeFirst();
14+
print(linkedList);
15+
linkedList.removeLast();
16+
print(linkedList);
417

18+
LinkedListStack stack =new LinkedListStack();
19+
for(int i = 0 ; i < 5 ; i ++){
20+
stack.push(i);
21+
print(stack);
22+
}
523
}

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66
2. 选择排序
77
3. 插入排序
88
4. 栈,队列,循环队列
9-
9+
5. 链表,链表实现栈
1010

0 commit comments

Comments
 (0)