Lab 7
Lab 7
1. Cài đặt stack trên cơ sở tham chiếu và chạy lại các chương trình đã viết trong buổi 4 trên
stack này.
Bài 1 : Đổi số sang nhị phân :
2. package LQD.Lab7;
3.
4. import java.util.Scanner;
5. class Link<T> {
6. public T Data;
7. public Link<T> next;
8.
9. public Link(T d) {
10. Data = d;
11. }
12. }
13.
14. class LinkedList<T> {
15. private Link<T> first;
16. private int count;
17.
18. public LinkedList() {
19. first = null;
20. count = 0;
21. }
22.
23. public boolean isEmpty() {
24. return first == null;
25. }
26.
27. public void insert(T d) {
28. Link<T> newLink = new Link<T>(d);
29. newLink.next = first;
30. first = newLink;
31. count++;
32. }
33.
34. public T delete() {
35. T d = (T) first.Data;
36. first = first.next;
37. count--;
38. return d;
39. }
40.
41. public int nItems() {
42. return count;
43. }
44.
45. public T peek() {
46. return (T) first.Data;
47. }
48.
49. }
50.
51. class Stack<T> {
52. private LinkedList<T> list;
53.
54. public Stack() {
55. list = new LinkedList<T>();
56. }
57.
58. public void push(T d) {
59. list.insert(d);
60. }
61.
62. public T pop() {
63. return (T) list.delete();
64. }
65.
66. public boolean isEmpty() {
67. return list.isEmpty();
68. }
69.
70. public int nItems() {
71. return list.nItems();
72. }
73.
74. public T peek() {
75. return (T) list.peek();
76. }
77.
78. }
79. public class Nhiphan_StackLinkedList {
80. public static void main(String[] args) {
81. Scanner sc = new Scanner(System.in);
82. Stack<Integer> s = new Stack<Integer>();
83. int n, i;
84. System.out.print("Nhap n:");
85. n = sc.nextInt();
86. while (n > 0) {
87. i = n % 2;
88. s.push(i);
89. n = n / 2;
90. }
91. System.out.print("Dang nhi phan:");
92. while (!s.isEmpty()) {
93. System.out.print(s.pop());
94. }
95. System.out.println();
96. }
97.
98. }
99.
Bài 2 : Đảo ngược chuỗi
package LQD.Lab7_2;
import java.util.Scanner;
import java.util.StringTokenizer;
class Link<T> {
public T Data;
public Link<T> next;
public Link(T d) {
Data = d;
}
}
class LinkedList<T> {
private Link<T> first;
private int count;
public LinkedList() {
first = null;
count = 0;
}
public T delete() {
T d = (T) first.Data;
first = first.next;
count--;
return d;
}
public T peek() {
return (T) first.Data;
}
class Stack<T> {
private LinkedList<T> list;
public Stack() {
list = new LinkedList<T>();
}
public T pop() {
return (T) list.delete();
}
import java.util.Scanner;
class Link<T> {
public T Data;
public Link<T> next;
public Link(T d) {
Data = d;
}
}
class LinkedList<T> {
private Link<T> first;
private int count;
public LinkedList() {
first = null;
count = 0;
}
public boolean isEmpty() {
return first == null;
}
public T delete() {
T d = (T) first.Data;
first = first.next;
count--;
return d;
}
public T peek() {
return (T) first.Data;
}
class Stack<T> {
private LinkedList<T> list;
public Stack() {
list = new LinkedList<T>();
}
public T pop() {
return (T) list.delete();
}
public T peek() {
return (T) list.peek();
}
}
public class DauNgoac_StackLinkedList {
public static boolean kiemTra(String s) {
Stack<Character> s1 = new Stack<Character>();
Stack<Character> s2 = new Stack<Character>();
Stack<Character> s3 = new Stack<Character>();
100. Cài đặt hàng đợi trên cơ sở tham chiếu và chạy lại các chương trình đã viết trong
buổi 5 trên hang đợi này
101. package LQD.Lab7_4;
102.
103. import java.util.Random;
104. import java.util.Scanner;
105.
106. class Link<T> {
107. public T Data;
108. public Link<T> next;
109.
110. public Link(T d) {
111. Data = d;
112. }
113. }
114.
115. class LinkedList<T> {
116. private Link<T> first;
117. private Link<T> last;
118. private int count;
119.
120. public LinkedList() {
121. first = null;
122. last = null;
123. count = 0;
124. }
125.
126. public boolean isEmpty() {
127. return first == null;
128. }
129.
130. public void insert(T d) {
131. Link<T> newLink = new Link<T>(d);
132. if (last != null) {
133. last.next = newLink;
134. }
135. last = newLink;
136. if (first == null) {
137. first = newLink;
138. }
139. count++;
140. }
141.
142. public T delete() {
143. if (isEmpty()) return null;
144. T d = first.Data;
145. first = first.next;
146. if (first == null) {
147. last = null;
148. }
149. count--;
150. return d;
151. }
152.
153. public int nItems() {
154. return count;
155. }
156.
157. public T peek() {
158. return first != null ? first.Data : null;
159. }
160. }
161.
162. class Queue<T> {
163. private LinkedList<T> list;
164.
165. public Queue() {
166. list = new LinkedList<T>();
167. }
168.
169. public void push(T d) {
170. list.insert(d);
171. }
172.
173. public T pop() {
174. return list.delete();
175. }
176.
177. public boolean isEmpty() {
178. return list.isEmpty();
179. }
180.
181. public int nItems() {
182. return list.nItems();
183. }
184.
185. public T peek() {
186. return list.peek();
187. }
188. }
189. public class RadixSort_QueueLinkedList {
190. static int soCS(int n){
191. int d = 0;
192. while(n > 0){
193. d++;
194. n = n/10;
195. }
196. return d;
197. }
198. static void NgauNhien(int n, int[] a, int max){
199. Random rd = new Random();
200. for(int i = 0; i < n; i++)
201. a[i] = rd.nextInt(max);
202. }
203. static void Xuat(int[] a, int n){
204. for(int i = 0; i < n; i++){
205. System.out.printf(" "+a[i]);
206. if(i %10 == 9)
207. System.out.println();
208. }
209. }
210. static void radixSort(int[] a, int n){
211. int i, k, m, lt, x;
212. Queue<Integer>[] q1, q2, s, d, t;
213. q1 = new Queue[10];
214. q2 = new Queue[10];
215. for (i = 0; i < 10; i++){
216. q1[i] = new Queue<Integer>();
217. q2[i] = new Queue<Integer>();
218. }
219. k = a[0];
220. for (i = 0; i < n; i++){
221. if (k < a[i]) k = a[i];
222. q1[a[i] % 10].push(a[i]);
223. }
224. lt = 1;
225. k = soCS(k);
226. s = q1;
227. d = q2;
228. for (m = 1; m < k; m++){
229. lt = lt *10;
230. for (i = 0; i < 10; i++)
231. while(!s[i].isEmpty()){
232. x = s[i].pop();
233. d[x/lt%10].push(x);
234. }
235. t = s;
236. s = d;
237. d = t;
238. }
239. n = 0;
240. for(i = 0; i < 10; i++){
241. while(!s[i].isEmpty())
242. a[n++] = s[i].pop();
243. }
244.
245. }
246. public static void main(String[] args) {
247. int[] a;
248. Scanner sc = new Scanner(System.in);
249. System.out.print("Nhap n va max: ");
250. int n = sc.nextInt();
251. int max = sc.nextInt();
252. a = new int[n];
253. NgauNhien(n, a, max);
254. System.out.println("Day so ban dau:");
255. Xuat(a, n);
256. System.out.println();
257. radixSort(a, n);
258. System.out.println("Day so da sap xep:");
259. Xuat(a, n);
260. }
261.
262. }
263.
264. Cài đặt danh sách liên kết đôi, sử dụng để tổ chức số nguyên lớn (bao nhiêu chữ
số cũng được) và tính 1000!