در این مطلب، ویدئو ساختار داده بازگشتی در پایتون – آموزش مقدماتی لیست پیوندی با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:30:24
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:00,480 –> 00:00:02,720
ساختارهای داده بازگشتی راز
2
00:00:02,720 –> 00:00:04,480
پشت هر
3
00:00:04,480 –> 00:00:05,839
برنامه قدرتمندی است که شما در
4
00:00:05,839 –> 00:00:07,440
رایانه خود از تلفن یا کنسول بازی خود استفاده می کنید.
5
00:00:07,440 –> 00:00:08,320
6
00:00:08,320 –> 00:00:09,920
7
00:00:09,920 –> 00:00:11,920
8
00:00:11,920 –> 00:00:13,759
9
00:00:13,759 –> 00:00:15,759
و مثل
10
00:00:15,759 –> 00:00:18,000
الان که در دوره ای هستید که شماره آن 110 است
11
00:00:18,000 –> 00:00:19,520
و بعد از آن
12
00:00:19,520 –> 00:00:22,320
دوره دیگری وجود دارد که ممکن است 210 باشد
13
00:00:22,320 –> 00:00:23,760
و بعد از آن ممکن است
14
00:00:23,760 –> 00:00:25,599
دوره دیگری باشد که 211 باشد.
15
00:00:25,599 –> 00:00:27,439
و اینها اعداد دوره در unc
16
00:00:27,439 –> 00:00:29,119
و در نهایت در جایی هستند.
17
00:00:29,119 –> 00:00:31,519
البته این زنجیره باید به خوبی خاتمه یا خاتمه یابد
18
00:00:31,519 –> 00:00:32,238
19
00:00:32,238 –> 00:00:34,320
این ایده که یک گره یا یک
20
00:00:34,320 –> 00:00:36,079
شی می تواند به
21
00:00:36,079 –> 00:00:38,399
شی دیگری از همان نوع ارجاع دهد چیزی است که
22
00:00:38,399 –> 00:00:39,280
این
23
00:00:39,280 –> 00:00:41,840
ساختار را تبدیل به یک ساختار بازگشتی می کند. بیایید ببینیم چگونه
24
00:00:41,840 –> 00:00:42,800
می توانیم
25
00:00:42,800 –> 00:00:45,120
این نوع ساختار را در زمینه
26
00:00:45,120 –> 00:00:46,399
پایتون،
27
00:00:46,399 –> 00:00:48,640
بنابراین تصور کنید به جای نامگذاری
28
00:00:48,640 –> 00:00:49,680
29
00:00:49,680 –> 00:00:51,760
کلاس خود و گفتن یک کلاس کلاس
30
00:00:51,760 –> 00:00:53,120
داریم، یکی از اینها را گره بنامیم و
31
00:00:53,120 –> 00:00:55,600
این یک عبارت یا اصطلاح رایج
32
00:00:55,600 –> 00:00:58,000
در یک da است. ساختار ta ما یک گره در
33
00:00:58,000 –> 00:00:58,719
34
00:00:58,719 –> 00:01:02,399
لیستی داریم که به هم پیوند خورده است
35
00:01:02,399 –> 00:01:04,559
و یک ویژگی داده ای دارد
36
00:01:04,559 –> 00:01:06,240
که شماره دوره خواهد بود
37
00:01:06,240 –> 00:01:08,560
و سپس توجه کنید که چه چیزی در مورد
38
00:01:08,560 –> 00:01:10,479
این کلاس خاص است و چیزی که
39
00:01:10,479 –> 00:01:11,200
این
40
00:01:11,200 –> 00:01:13,920
نوع داده را تبدیل به یک نوع داده بازگشتی می کند این واقعیت است که
41
00:01:13,920 –> 00:01:14,640
این
42
00:01:14,640 –> 00:01:17,360
ویژگی گره دارای یک شبکه است متأسفانه این
43
00:01:17,360 –> 00:01:18,960
ویژگی بعدی از نوع گره
44
00:01:18,960 –> 00:01:20,560
است و از همان نوع است که این
45
00:01:20,560 –> 00:01:22,960
ویژگی کلاس تعریف شده در آن است
46
00:01:22,960 –> 00:01:24,560
و بنابراین در اینجا ما یک بعدی داریم که می
47
00:01:24,560 –> 00:01:26,159
تواند ارجاع به یک
48
00:01:26,159 –> 00:01:28,320
شی گره دیگر داشته باشد و این کاملاً عمیق است
49
00:01:28,320 –> 00:01:29,200
درست است. این همان
50
00:01:29,200 –> 00:01:32,799
چیزی است که این نوع داده را تبدیل به یک نوع داده بازگشتی میکند،
51
00:01:32,799 –> 00:01:34,240
اگر بخواهیم این را کمی
52
00:01:34,240 –> 00:01:35,920
دقیقتر تصور کنیم، همانطور که
53
00:01:35,920 –> 00:01:38,720
در نمودار حافظه تصور میکنیم و در
54
00:01:38,720 –> 00:01:40,240
مورد اشیاء خود فکر میکنیم، همانطور که قبلاً در مورد
55
00:01:40,240 –> 00:01:42,240
مدلسازی فکر میکردیم و به نوعی
56
00:01:42,240 –> 00:01:44,799
یک نمودار ضعیف رسم شده در اینجا میتوانیم
57
00:01:44,799 –> 00:01:46,240
تصور کنیم. بسیار خوب،
58
00:01:46,240 –> 00:01:48,799
ما اشیاء گره ای داریم و
59
00:01:48,799 –> 00:01:50,640
بعدی یک اشاره یا اشاره گر
60
00:01:50,640 –> 00:01:51,200
به
61
00:01:51,200 –> 00:01:55,680
یک شی گره دیگر خواهد بود و شما می توانید
62
00:01:55,680 –> 00:01:57,920
تصور کنید که این زنجیره تا زمانی که
63
00:01:57,920 –> 00:02:00,000
می خواهید ادامه پیدا کند ادامه می یابد.
64
00:02:00,000 –> 00:02:02,960
گرهها را به گرههای بعدی متصل میکنید
65
00:02:02,960 –> 00:02:04,159
66
00:02:04,159 –> 00:02:06,000
و این یکی از کلیدهای
67
00:02:06,000 –> 00:02:08,318
انواع دادههای بازگشتی یا بازگشتی است که میتوانید با ترکیب آنها
68
00:02:08,318 –> 00:02:09,280
با یکدیگر
69
00:02:09,280 –> 00:02:11,360
ساختارهای بزرگتر و بزرگتر
70
00:02:11,360 –> 00:02:13,680
بسازید،
71
00:02:13,680 –> 00:02:16,160
بنابراین در برخی مواقع باید بدانیم چگونه
72
00:02:16,160 –> 00:02:18,400
میتوانیم از بینهایت بودن آن جلوگیری کنیم.
73
00:02:18,400 –> 00:02:21,200
نوع داده بازگشتی زیرا
74
00:02:21,200 –> 00:02:22,160
همانطور که تعریف شده است
75
00:02:22,160 –> 00:02:25,360
چگونه می توانیم بفهمیم که آیا یک بعدی همیشه
76
00:02:25,360 –> 00:02:26,640
باید گره دیگری باشد
77
00:02:26,640 –> 00:02:28,560
چه زمانی درست به پایان می رسد، این
78
00:02:28,560 –> 00:02:30,480
سوال معتبری است که در این مرحله قابل تعجب است
79
00:02:30,480 –> 00:02:32,640
و ما هنوز پاسخی برای آن
80
00:02:32,640 –> 00:02:34,239
نداریم اما قبل از نگرانی
81
00:02:34,239 –> 00:02:35,440
بیایید در مورد
82
00:02:35,440 –> 00:02:36,640
ساختارهای داده بازگشتی کمی به
83
00:02:36,640 –> 00:02:38,959
طور کلی فکر کنیم و زمینه داشته باشیم و سپس
84
00:02:38,959 –> 00:02:40,959
با نحوه
85
00:02:40,959 –> 00:02:42,800
پایان دادن به یک ساختار داده بازگشتی
86
00:02:42,800 –> 00:02:45,280
در کد خود
87
00:02:45,519 –> 00:02:47,040
در این دوره که به طور خاص به یک لیست پیوندی منفرد نگاه می کنیم بازی می کنیم.
88
00:02:47,040 –> 00:02:49,440
89
00:02:49,440 –> 00:02:51,920
برای تمرین با
90
00:02:51,920 –> 00:02:53,680
ساختارهای داده بازگشتی و همچنین فرآیندهای بازگشتی
91
00:02:53,680 –> 00:02:54,480
92
00:02:54,480 –> 00:02:56,480
و بهترین راه در ذهن من برای یادگیری
93
00:02:56,480 –> 00:02:58,159
نحوه نوشتن توابع بازگشتی
94
00:02:58,159 –> 00:02:59,920
این است که آنها را بر اساس داده بنویسم. ساختاری
95
00:02:59,920 –> 00:03:01,200
96
00:03:01,200 –> 00:03:03,120
که شکل و احساسی برای آنها دارد
97
00:03:03,120 –> 00:03:04,720
که کمی ملموس تر از
98
00:03:04,720 –> 00:03:06,239
اعداد یا رشته های
99
00:03:06,239 –> 00:03:08,080
درست است و این قانون با
100
00:03:08,080 –> 00:03:09,760
نحوه استفاده از بازگشت در دنیای واقعی
101
00:03:09,760 –> 00:03:10,879
در پروژه ها و
102
00:03:10,879 –> 00:03:12,640
برنامه هایی که می خواهید بسازید مطابقت دارد.
103
00:03:12,640 –> 00:03:14,080
شما باید یک تابع بازگشتی بنویسید
104
00:03:14,080 –> 00:03:16,319
، احتمالاً برای کار با یک
105
00:03:16,319 –> 00:03:18,720
ساختار داده بازگشتی اکنون در دوره زیر
106
00:03:18,720 –> 00:03:20,239
در comp 210
107
00:03:20,239 –> 00:03:22,640
به ساختارهای داده بازگشتی پیچیده تری نگاه خواهید کرد که در
108
00:03:22,640 –> 00:03:23,920
آن
109
00:03:23,920 –> 00:03:25,920
می توانید چیزهایی مانند درختان را تشکیل دهید و بنابراین
110
00:03:25,920 –> 00:03:27,200
در این
111
00:03:27,200 –> 00:03:28,720
کلاس توجه کنید که من یک
112
00:03:28,720 –> 00:03:30,400
عنصر با نام متفاوت را نامگذاری کردهاید،
113
00:03:30,400 –> 00:03:32,640
توجه داشته باشید که دو ویژگی دارد که
114
00:03:32,640 –> 00:03:33,840
از نوع عنصر هستند
115
00:03:33,840 –> 00:03:36,560
که به آن اجازه میدهد اگر
116
00:03:36,560 –> 00:03:38,400
از نظر جهتداری به
117
00:03:38,400 –> 00:03:40,400
سمت چپ و راست فکر میکنیم، یک سمت چپ داشته باشد،
118
00:03:40,400 –> 00:03:43,360
و ممکن است به این صورت درختی از
119
00:03:43,360 –> 00:03:43,840
گرهها را تشکیل دهید.
120
00:03:43,840 –> 00:03:46,959
جایی که هر شی در درخت شما می
121
00:03:46,959 –> 00:03:48,640
تواند به دو گره دیگر اشاره کند و
122
00:03:48,640 –> 00:03:51,040
شاخه هایی وجود دارد که به آن اجازه گسترش
123
00:03:51,040 –> 00:03:53,040
می دهد، می توانید تصور کنید که هر گره
124
00:03:53,040 –> 00:03:54,159
قادر است
125
00:03:54,159 –> 00:03:56,239
بیش از دو را ذخیره کند ممکن است لیستی از گره های دیگر
126
00:03:56,239 –> 00:03:58,000
داشته باشد. از همان نوع
127
00:03:58,000 –> 00:03:59,680
و اگر به چیزهایی مانند
128
00:03:59,680 –> 00:04:01,680
یک شبکه اجتماعی یا
129
00:04:01,680 –> 00:04:03,599
مشکلات دیگری مانند سفر در اطراف یک
130
00:04:03,599 –> 00:04:06,560
نقشه و در شهر و ایجاد
131
00:04:06,560 –> 00:04:08,640
نمودارهای مداری فکر می کنید، چیزی است که
132
00:04:08,640 –> 00:04:10,400
ساختار داده بازگشتی دیگری است که
133
00:04:10,400 –> 00:04:12,400
در آن رئوس و رئوس دارید. یالهایی که
134
00:04:12,400 –> 00:04:13,519
آن راسها را به هم متصل میکنند
135
00:04:13,519 –> 00:04:15,280
و اینکه چگونه آنها را مدلسازی میکنید و در مورد آن روابط فکر میکنید،
136
00:04:15,280 –> 00:04:16,798
137
00:04:16,798 –> 00:04:20,000
اغلب میتوانند به صورت بازگشتی انجام شوند،
138
00:04:20,000 –> 00:04:22,400
139
00:04:23,600 –> 00:04:25,360
بنابراین این فهرست پیوندی که
140
00:04:25,360 –> 00:04:26,960
در این دوره و به طور خاص در این درس روی آن تمرکز
141
00:04:26,960 –> 00:04:28,080
142
00:04:28,080 –> 00:04:29,840
کردهایم، بسیار ساده است.
143
00:04:29,840 –> 00:04:32,320
از اصطلاحی استفاده کنید که قرار است
144
00:04:32,320 –> 00:04:33,840
زمانی باشد که می گوییم در مورد
145
00:04:33,840 –> 00:04:35,440
سر یک لیست پیوندی صحبت می کنیم، در
146
00:04:35,440 –> 00:04:37,759
مورد ارجاع به اولین گره صحبت می کنیم،
147
00:04:37,759 –> 00:04:40,400
این اصطلاح زمانی
148
00:04:40,400 –> 00:04:41,680
که با لیست ها کار می کنید
149
00:04:41,680 –> 00:04:43,919
و زمانی که به آن فکر می کنیم رایج است. هنگامی که
150
00:04:43,919 –> 00:04:45,440
ما سر یک لیست
151
00:04:45,440 –> 00:04:48,000
را داریم، اشاره ای به اولین گره ای است
152
00:04:48,000 –> 00:04:48,880
که به نوعی می خواهیم ببینیم
153
00:04:48,880 –> 00:04:51,440
و من در این راه قرار دارم، اما
154
00:04:51,440 –> 00:04:53,520
به نوعی می توانیم
155
00:04:53,520 –> 00:04:56,240
لیستی را بدون مقدار نشان دهیم و به پایان برسانیم. همه
156
00:04:56,240 –> 00:04:57,600
آنها’ چگونه یک لیست را خاتمه می دهیم و
157
00:04:57,600 –> 00:04:58,800
خواهیم دید که چگونه این کار در یک لحظه انجام می شود، در
158
00:04:58,800 –> 00:04:59,360
159
00:04:59,360 –> 00:05:03,039
حالی که همچنان
160
00:05:03,039 –> 00:05:04,880
آنچه را که می خواهم بگویم قبل از رسیدن به آنجا به طور کامل تایپ می کنیم،
161
00:05:04,880 –> 00:05:06,639
هرچند برخی هشدارها در مورد
162
00:05:06,639 –> 00:05:08,000
لیست های پیوند داده شده وجود دارد، بنابراین ابتدا
163
00:05:08,000 –> 00:05:09,919
همانطور که می دانیم در حال رفتن هستیم برای اینکه بتوانید
164
00:05:09,919 –> 00:05:11,440
این لیست ها را با زنجیر کردن آنها به
165
00:05:11,440 –> 00:05:12,960
یکدیگر بسازید و با اضافه
166
00:05:12,960 –> 00:05:16,320
کردن گره های بیشتر یکی پس از دیگری به
167
00:05:16,320 –> 00:05:20,240
گره بعدی که قبل از آن قرار
168
00:05:20,240 –> 00:05:21,840
می گیرد، احتمالاً از قبل
169
00:05:21,840 –> 00:05:24,240
این احساس را پیدا کرده اید که کار با آن پیچیده تر و
170
00:05:24,240 –> 00:05:26,720
شاید سخت تر از
171
00:05:26,720 –> 00:05:28,639
لیستی که در پایتون تعبیه شده است و
172
00:05:28,639 –> 00:05:30,320
شما با تمام این
173
00:05:30,320 –> 00:05:30,720
دوره
174
00:05:30,720 –> 00:05:32,479
که می شناسید و دوست دارید در این مرحله کار کرده اید
175
00:05:32,479 –> 00:05:34,960
درست لیستی که می توانید به شما اضافه کنید می
176
00:05:34,960 –> 00:05:36,800
توانید از همه این
177
00:05:36,800 –> 00:05:37,680
روش های داخلی استفاده
178
00:05:37,680 –> 00:05:40,720
کنید که می توانید واقعاً آن را فهرست کنید. راههای خوب
179
00:05:40,720 –> 00:05:41,840
180
00:05:41,840 –> 00:05:44,720
برای اکثر مشکلاتی که میخواهید حل کنید
181
00:05:44,720 –> 00:05:46,639
و اینکه ما در تمام دورههای طولانی در حال حل
182
00:05:46,639 –> 00:05:47,360
183
00:05:47,360 –> 00:05:50,160
کردن فهرست بودهایم، راه درستی برای
184
00:05:50,160 –> 00:05:52,080
کار کردن با یک لیست پیوندی و ساختار دادهای
185
00:05:52,080 –> 00:05:53,120
مانند این است
186
00:05:53,120 –> 00:05:56,000
که ماهیت بازگشتی و
187
00:05:56,000 –> 00:05:57,600
زیبا دارد. ساده ic و روشی که
188
00:05:57,600 –> 00:05:59,120
قرار است آن را پردازش
189
00:05:59,120 –> 00:06:00,720
کنیم بسیار دست و پا گیرتر است و
190
00:06:00,720 –> 00:06:02,560
راهی برای دور زدن آن وجود ندارد، بنابراین
191
00:06:02,560 –> 00:06:04,319
احتمالاً از خود می پرسید که چرا
192
00:06:04,319 –> 00:06:05,199
193
00:06:05,199 –> 00:06:09,280
ما وقت خود را صرف یادگیری
194
00:06:09,280 –> 00:06:10,720
این لیست پیوندی می کنیم. به
195
00:06:10,720 –> 00:06:13,039
196
00:06:13,039 –> 00:06:16,319
نظر من بهترین وسیله برای به دست آوردن
197
00:06:16,319 –> 00:06:17,600
تفکر راحت تر
198
00:06:17,600 –> 00:06:19,440
از نظر فرآیندها و توابع بازگشتی
199
00:06:19,440 –> 00:06:20,800
200
00:06:20,800 –> 00:06:22,319
و همچنین به دست آوردن برخی
201
00:06:22,319 –> 00:06:24,000
منابع درک تمرینی و نحوه
202
00:06:24,000 –> 00:06:24,960
ساختن
203
00:06:24,960 –> 00:06:28,400
گراف از گره های نمودارهای اشیاء
204
00:06:28,400 –> 00:06:29,440
با هم
205
00:06:29,440 –> 00:06:31,600
و برای درک این مفهوم
206
00:06:31,600 –> 00:06:34,160
هیچ در پایتون که null نیز نامیده می شود
207
00:06:34,160 –> 00:06:35,680
و برخی از زبان های دیگر اگر ممکن است آن را
208
00:06:35,680 –> 00:06:38,080
دیده باشید یا اگر ادامه دهید null را خواهید دید
209
00:06:38,080 –> 00:06:41,440
و در زبان های دیگر مانند جاوا
210
00:06:41,440 –> 00:06:45,280
و بنابراین این ابزاری است که ما از مرتب سازی استفاده می کنیم.
211
00:06:45,280 –> 00:06:48,000
بهعنوان جعبهای برای تمرین
212
00:06:48,000 –> 00:06:50,160
درک مفاهیمی
213
00:06:50,160 –> 00:06:52,800
که یاد میگیریم و حتی اگر
214
00:06:52,800 –> 00:06:54,800
فهرست پیوندی بهتنهایی احتمالاً
215
00:06:54,800 –> 00:06:55,360
216
00:06:55,360 –> 00:06:57,199
چیزی نیست که راهحل اصلی شما
217
00:06:57,199 –> 00:06:59,120
برای برنامهای باشد که میخواهید آن را حل کنید. در
218
00:06:59,120 –> 00:07:01,120
آینده
219
00:07:01,120 –> 00:07:04,160
نزدیک بهترین راه
220
00:07:04,160 –> 00:07:08,080
برای یادگیری این مفاهیم بدون
221
00:07:08,080 –> 00:07:10,000
گیج شدن در مورد بسیاری از
222
00:07:10,000 –> 00:07:11,520
جزئیات دیگر است، ما
223
00:07:11,520 –> 00:07:13,120
جزئیاتی را که باید نگران آن باشیم با
224
00:07:13,120 –> 00:07:14,000
ساده سازی
225
00:07:14,000 –> 00:07:15,759
ساختار داده به
226
00:07:15,759 –> 00:07:17,759
یک لیست بسیار ساده به صورت یک لیست پیوندی به حداقل می رسانیم.
227
00:07:17,759 –> 00:07:19,440
روشی که تمرکز و تاکید
228
00:07:19,440 –> 00:07:21,280
میتواند بر ماهیت بازگشتی
229
00:07:21,280 –> 00:07:22,800
الگوریتمهای ما و
230
00:07:22,800 –> 00:07:24,800
توابعی باشد که مینویسیم و همچنین نحوه
231
00:07:24,800 –> 00:07:26,319
تفکر ما در مورد ارجاعات بین
232
00:07:26,319 –> 00:07:27,360
اشیاء
233
00:07:27,360 –> 00:07:31,120
کاملاً درست است، بنابراین یک
234
00:07:31,120 –> 00:07:32,639
مورد پایه ویژگیهای بازگشتی چیست
235
00:07:32,639 –> 00:07:34,160
و پاسخ در واقع قبلاً
236
00:07:34,160 –> 00:07:35,840
نشان داده شده است. اسلاید از نظر یک
237
00:07:35,840 –> 00:07:37,440
238
00:07:37,440 –> 00:07:39,919
برنامه پایتون با تایپ قوی خوب میخواهیم بتوانیم
239
00:07:39,919 –> 00:07:42,000
ویژگی بعدی را اختیاری
240
00:07:42,000 –> 00:07:44,160
کنیم، میخواهیم بتوانیم بگوییم سلام، این
241
00:07:44,160 –> 00:07:45,280
یا یک گره است
242
00:07:45,280 –> 00:07:46,879
یا اصلاً چیزی نیست و وقتی اصلاً
243
00:07:46,879 –> 00:07:48,560
چیزی نیست، به این معنی است که شما به آن میرسید.
244
00:07:48,560 –> 00:07:49,840
انتهای یک لیست
245
00:07:49,840 –> 00:07:51,759
از یک لیست پیوندی است و هیچ
246
00:07:51,759 –> 00:07:53,039
گره دیگری برای پردازش
247
00:07:53,039 –> 00:07:55,840
در این مرحله وجود ندارد، بنابراین وقتی این
248
00:07:55,840 –> 00:07:57,680
سوال را مطرح می کنید که آیا هر گره به
249
00:07:57,680 –> 00:07:58,000
250
00:07:58,000 –> 00:08:00,319
گره دیگری اشاره دارد hen آیا آن را به خوبی خاتمه می دهد زمانی
251
00:08:00,319 –> 00:08:01,039
که
252
00:08:01,039 –> 00:08:04,319
ویژگی بعدی برخی از گره ها در گره کلاس ما
253
00:08:04,319 –> 00:08:06,720
به هیچ اشاره ای ندارد و به هیچ گره دیگری اشاره نمی کند، به پایان
254
00:08:06,720 –> 00:08:08,479
255
00:08:08,479 –> 00:08:11,120
می رسد، بنابراین ما در مورد حالت پایانی
256
00:08:11,120 –> 00:08:13,199
یا حالت پایه یک
257
00:08:13,199 –> 00:08:14,879
ساختار داده بازگشتی فکر می کنیم. دیگر هیچ
258
00:08:14,879 –> 00:08:16,720
ارجاعی به اشیاء دیگر
259
00:08:16,720 –> 00:08:18,160
که بخشی از ساختار داده بازگشتی ما هستند
260
00:08:18,160 –> 00:08:21,440
برای پردازش وجود ندارد،
261
00:08:21,759 –> 00:08:24,960
چرا ما جلوتر برویم و شروع به مدلسازی
262
00:08:24,960 –> 00:08:26,960
این موضوع در مقابل کد با هم نکنیم،
263
00:08:26,960 –> 00:08:29,919
بنابراین من از شما میخواهم یک برنامه پایتون را راهاندازی کنید
264
00:08:29,919 –> 00:08:30,639
265
00:08:30,639 –> 00:08:34,000
و نامگذاری آن ls3043 underscore
266
00:08:34,000 –> 00:08:34,559
267
00:08:34,559 –> 00:08:36,479
لیست پیوندی نام بسیار خوبی برای این کار است و قرار دادن آن
268
00:08:36,479 –> 00:08:38,159
در فهرست درس های شما
269
00:08:38,159 –> 00:08:39,679
و ما قصد داریم
270
00:08:39,679 –> 00:08:41,599
از آینده توانایی
271
00:08:41,599 –> 00:08:43,599
نوشتن کلاس هایی را وارد کنیم که دارای حاشیه نویسی نوع هستند
272
00:08:43,599 –> 00:08:45,680
که به کلاس ارجاع می دهند
273
00:08:45,680 –> 00:08:47,600
. تعریف شده است، بنابراین
274
00:08:47,600 –> 00:08:49,680
ما قبلاً این را دیدهایم،
275
00:08:49,680 –> 00:08:51,200
اما این خط اول یک جورهایی بد بو است،
276
00:08:51,200 –> 00:08:52,640
ما میگوییم که در حال وارد کردن یک ویژگی
277
00:08:52,640 –> 00:08:53,279
از
278
00:08:53,279 –> 00:08:56,000
نسخه آینده پایتون هستیم تا
279
00:08:56,000 –> 00:08:56,640
280
00:08:56,640 –> 00:09:00,080
این نوع اعلان را درست
281
00:09:00,080 –> 00:09:04,399
کنیم. ng برای وارد
282
00:09:05,200 –> 00:09:08,000
کردن ایده یک نوع داده اختیاری از تایپ کردن، بنابراین یک
283
00:09:08,000 –> 00:09:09,120
نوع اختیاری
284
00:09:09,120 –> 00:09:11,440
خواهد بود که در آن میتوانیم
285
00:09:11,440 –> 00:09:13,200
بگوییم یا یک گره داریم یا شما
286
00:09:13,200 –> 00:09:13,600
هیچ کدام را ندارید
287
00:09:13,600 –> 00:09:15,279
و اینها تنها دو گزینه هستند،
288
00:09:15,279 –> 00:09:16,880
پس بیایید برویم پیش رو و کلاس خود را تعریف کنید
289
00:09:16,880 –> 00:09:18,080
که یک
290
00:09:18,080 –> 00:09:19,519
گره کلاس باشد و دو
291
00:09:19,519 –> 00:09:22,160
ویژگی داشته باشد یک ویژگی داده از نوع int
292
00:09:22,160 –> 00:09:25,120
و یک ویژگی بعدی از گره اختیاری بسیار
293
00:09:25,120 –> 00:09:26,560
خوب است
294
00:09:26,560 –> 00:09:28,640
و اگر بخواهیم یک مقدار پیش فرض
295
00:09:28,640 –> 00:09:30,800
در اینجا بدهیم، مقدار پیش فرض می تواند هیچ باشد.
296
00:09:30,800 –> 00:09:34,320
این گره و میتوان گفت 0 برای
297
00:09:34,320 –> 00:09:35,680
دادهها، اما میخواهیم سازندهای ایجاد
298
00:09:35,680 –> 00:09:37,200
299
00:09:37,200 –> 00:09:39,279
کنیم که به ما اجازه میدهد
300
00:09:39,279 –> 00:09:42,480
هر دوی این ویژگیها را
301
00:09:42,720 –> 00:09:44,640
به عنوان بخشی از فرآیند ساخت و ساز مقداردهی اولیه
302
00:09:44,640 –> 00:09:46,000
کنیم، بنابراین بیایید ادامه دهیم و این کار را
303
00:09:46,000 –> 00:09:46,880
انجام دهیم و یک تعریف کنیم.
304
00:09:46,880 –> 00:09:50,000
متد init یا سازنده ای
305
00:09:50,000 –> 00:09:52,080
که به شی جدیدی
306
00:09:52,080 –> 00:09:53,440
که در حال ساخت
307
00:09:53,440 –> 00:09:55,760
است ارجاع می دهد و برای هر یک از این ویژگی ها پارامترهایی دارد
308
00:09:55,760 –> 00:09:57,120
که می خواهیم
309
00:09:57,120 –> 00:09:59,519
مقداردهی اولیه کنیم، بنابراین من پارامتر داده
310
00:09:59,519 –> 00:10:01,440
و پارامتر بعدی خود را دریافت کرده ام
311
00:10:01,440 –> 00:10:04,640
و متوجه می شوم که این نوع ها با هم مطابقت دارند به
312
00:10:04,640 –> 00:10:07,920
طوری که ما می توانیم n حالا بگویید خوب self.data
313
00:10:07,920 –> 00:10:08,320
314
00:10:08,320 –> 00:10:12,160
داده است و
315
00:10:12,160 –> 00:10:15,279
self.next در مرحله بعدی کاملاً درست است
316
00:10:15,279 –> 00:10:18,640
و ما
317
00:10:18,640 –> 00:10:20,720
یک پیاده سازی بسیار ساده از یک گره لیست پیوندی را
318
00:10:20,720 –> 00:10:22,079
در اینجا داریم
319
00:10:22,079 –> 00:10:24,640
که این دو ویژگی را در خود دارد و
320
00:10:24,640 –> 00:10:25,920
چرا ما جلوتر برویم
321
00:10:25,920 –> 00:10:27,920
و تنظیم نکنیم. مثالی که قبل از آن داشتیم بررسی میکردیم
322
00:10:27,920 –> 00:10:28,959
323
00:10:28,959 –> 00:10:30,079
یکی از چیزهایی که در
324
00:10:30,079 –> 00:10:31,920
مورد کار کردن با یک لیست پیوندی عجیب و غریب خواهد بود
325
00:10:31,920 –> 00:10:32,880
، این است که شما
326
00:10:32,880 –> 00:10:35,600
بهنوعی فهرست پیوندی منفرد به این صورت است، این است که
327
00:10:35,600 –> 00:10:37,360
ما از پشت لیست شروع
328
00:10:37,360 –> 00:10:38,959
میکنیم و راه خود را به جلو ادامه میدهیم. درست است پس اجازه
329
00:10:38,959 –> 00:10:40,160
دهید آنچه را که می خواهیم مدل سازی کنیم بنویسم،
330
00:10:40,160 –> 00:10:41,360
بنابراین
331
00:10:41,360 –> 00:10:44,000
110 بود یک گره است
332
00:10:44,000 –> 00:10:44,839
333
00:10:44,839 –> 00:10:46,959
و 210 دنبال می شود و
334
00:10:46,959 –> 00:10:48,720
هیچکدام درست دنبال نمی شود، بنابراین این لیست ما خواهد بود،
335
00:10:48,720 –> 00:10:52,160
خوب بیایید ادامه دهیم
336
00:10:52,160 –> 00:10:53,839
و این یادداشت 210 را تنظیم کنید همانطور که گفتم
337
00:10:53,839 –> 00:10:56,880
ما تمایل داریم لیست های خود را از پشت افزایش دهیم
338
00:10:56,880 –> 00:10:59,760
و من حتی قصد ندارم یک
339
00:10:59,760 –> 00:11:01,519
تابع اصلی را در اینجا تنظیم کنم، اجازه دهید فقط این
340
00:11:01,519 –> 00:11:04,160
را در دامنه جهانی بنویسیم، بنابراین اگر بگوییم
341
00:11:04,160 –> 00:11:05,040
342
00:11:05,040 –> 00:11:08,560
گره سر ما این است اگر از نوع گره باشد،
343
00:11:08,560 –> 00:11:12,000
می توانیم یک گره جدید با
344
00:11:12,000 –> 00:11:13,120
ویژگی داده 210
345
00:11:13,120 –> 00:11:17,440
و یک بعدی بسازیم مقدار هیچکدام
346
00:11:17,440 –> 00:11:20,720
خوب است خوب، چطور
347
00:11:20,720 –> 00:11:23,920
میتوانیم گره بعدی را برای چاه 110 تنظیم کنیم،
348
00:11:23,920 –> 00:11:26,720
میتوانیم سر را به حالتی که دیگر نباشد تغییر دهیم
349
00:11:26,720 –> 00:11:27,920
و در واقع به من اجازه دهید این
350
00:11:27,920 –> 00:11:29,760
نمودار را بهروزرسانی کنم و سپس در نهایت به شکل
351
00:11:29,760 –> 00:11:31,279
ظاهری آن نگاه خواهیم کرد. در یک
352
00:11:31,279 –> 00:11:32,720
نمودار حافظه فقط در یک لحظه،
353
00:11:32,720 –> 00:11:35,120
بنابراین در حال حاضر اگر بخواهیم این
354
00:11:35,120 –> 00:11:35,920
برنامه را
355
00:11:35,920 –> 00:11:38,160
بعد از خط 16 اجرا کنیم، می دانید که من یک
356
00:11:38,160 –> 00:11:39,839
متغیر به نام head
357
00:11:39,839 –> 00:11:42,240
در من در فریم globals خود خواهم داشت و
358
00:11:42,240 –> 00:11:43,920
به
359
00:11:43,920 –> 00:11:46,160
این شی گره اشاره می کند که مقدار آن 210 است. و
360
00:11:46,160 –> 00:11:47,440
آن شی گره
361
00:11:47,440 –> 00:11:50,399
بعدی هیچ خواهد داشت و سپس کاری که
362
00:11:50,399 –> 00:11:51,680
میخواهیم انجام دهیم این است که بگوییم خوب، شما میدانید
363
00:11:51,680 –> 00:11:53,519
که در واقع چه چیزی
364
00:11:53,519 –> 00:11:56,399
به سرگروه جدید دیگری اختصاص داده شده است که
365
00:11:56,399 –> 00:11:57,120
دادههای آن
366
00:11:57,120 –> 00:11:59,760
110 است و چه کسی بعدی است، همان
367
00:11:59,760 –> 00:12:01,279
چیزی است که قبلاً
368
00:12:01,279 –> 00:12:04,160
درست بود و بنابراین این همان چیزی است که در
369
00:12:04,160 –> 00:12:05,279
نهایت به من اجازه میدهد تا ادامه دهم و
370
00:12:05,279 –> 00:12:05,920
این
371
00:12:05,920 –> 00:12:07,120
را کمی بیشتر شبیه
372
00:12:07,120 –> 00:12:10,160
نمودار حافظهای بسازیم که مینویسیم، بنابراین گره دارای
373
00:12:10,160 –> 00:12:14,079
یک ویژگی داده 210
374
00:12:14,079 –> 00:12:18,560
و یک ویژگی بعدی است که در حال حاضر هیچکدام
375
00:12:18,560 –> 00:12:20,880
درست نیست
376
00:12:22,000 –> 00:12:24,240
و گاهی اوقات ممکن است ببینید من
377
00:12:24,240 –> 00:12:25,760
به جای آن مینویسم. از هیچ جو
378
00:12:25,760 –> 00:12:27,680
علامت صفر یا علامت
379
00:12:27,680 –> 00:12:29,120
380
00:12:29,120 –> 00:12:30,720
هیچ، هر یک از اینها برای اهداف ما کاملاً مناسب
381
00:12:30,720 –> 00:12:32,720
است، اما از نظر فنی فروشگاه
382
00:12:32,720 –> 00:12:34,079
در پایتون یک مقدار غیرمجاز است،
383
00:12:34,079 –> 00:12:35,920
خوب که خط اول بود، پس
384
00:12:35,920 –> 00:12:37,120
این خط بعدی میگوید خوب
385
00:12:37,120 –> 00:12:38,800
برو یک هد جدید بساز
386
00:12:38,800 –> 00:12:40,560
یا متاسفم برو یک گره جدید بساز که
387
00:12:40,560 –> 00:12:42,320
در نهایت یک گره راه اندازی می کند
388
00:12:42,320 –> 00:12:43,920
و در سازنده می دانیم که
389
00:12:43,920 –> 00:12:46,639
ویژگی داده
390
00:12:46,639 –> 00:12:51,040
110 خواهد بود و ویژگی بعدی
391
00:12:51,040 –> 00:12:52,720
یا ویژگی بعدی هر
392
00:12:52,720 –> 00:12:54,399
head
393
00:12:54,399 –> 00:12:56,720
در فریم جهانی است، بنابراین head این
394
00:12:56,720 –> 00:12:57,839
اشاره به این بود. node so
395
00:12:57,839 –> 00:13:00,240
next ارجاع به
396
00:13:00,240 –> 00:13:01,040
گره ای خواهد بود که
397
00:13:01,040 –> 00:13:04,720
در آن صفت داده 210 بود
398
00:13:04,720 –> 00:13:06,639
، بنابراین اکنون ما این تنظیمات را داریم و
399
00:13:06,639 –> 00:13:08,800
پس از آن زمانی که سازنده برمی گرداند آنچه
400
00:13:08,800 –> 00:13:10,240
را که باز می گرداند،
401
00:13:10,240 –> 00:13:12,000
مرجعی است برای گفتن خوب make head.
402
00:13:12,000 –> 00:13:13,839
دیگر 210
403
00:13:13,839 –> 00:13:16,160
نیست، بلکه make به این شی گره ارجاع
404
00:13:16,160 –> 00:13:19,040
داده بود که در آن ویژگی داده 110 بود.
405
00:13:19,040 –> 00:13:22,160
بنابراین این دو خط این
406
00:13:22,160 –> 00:13:25,600
لیست پیوندی را تنظیم می کنند که در آن
407
00:13:25,600 –> 00:13:28,800
گره سر مرجعی است به شی با
408
00:13:28,800 –> 00:13:30,320
ویژگی داده 110
409
00:13:30,320 –> 00:13:33,200
و به دنبال آن ویژگی داده 210
410
00:13:33,200 –> 00:13:34,000
برای مورد بعدی
411
00:13:34,000 –> 00:13:37,839
کاملاً درست است و شما می توانید بگویید که
412
00:13:37,839 –> 00:13:39,760
این کار بسیار دشوارتر از کار
413
00:13:39,760 –> 00:13:41,760
کردن مستقیم با یک لیست است، اما این
414
00:13:41,760 –> 00:13:43,760
به ما تمرین بسیار خوبی برای کار
415
00:13:43,760 –> 00:13:44,639
با مراجع
416
00:13:44,639 –> 00:13:49,839
و الگوریتم های بازگشتی می
417
00:13:50,480 –> 00:13:53,120
دهد، بنابراین این پایه است. مورد یک
418
00:13:53,120 –> 00:13:53,920
نوع داده بازگشتی
419
00:13:53,920 –> 00:13:56,720
هنگامی که یکی از ویژگی های شما که انتظار
420
00:13:56,720 –> 00:13:58,880
دارد به گره دیگری از همان
421
00:13:58,880 –> 00:14:02,240
نوع یا شی دیگری از همان نوع
422
00:14:02,240 –> 00:14:04,399
ارجاع دهد، در واقع به هیچ شیئی اشاره نمی کند،
423
00:14:04,399 –> 00:14:05,519
424
00:14:05,519 –> 00:14:06,800
شما به حالت پایه داده بازگشتی خود رسیده اید.
425
00:14:06,800 –> 00:14:08,720
تایپ کنید،
426
00:14:08,720 –> 00:14:09,839
بنابراین برخی از کارهای اساسی
427
00:14:09,839 –> 00:14:11,040
که ما می توانیم با لیست پیوندی خود انجام دهیم، چه
428
00:14:11,040 –> 00:14:12,160
چیزهایی هستند که به تازگی دیدیم، می
429
00:14:12,160 –> 00:14:13,760
توانیم یک گره جدید
430
00:14:13,760 –> 00:14:16,000
در جلوی یک لیست دیگر درست کنیم، ما
431
00:14:16,000 –> 00:14:17,120
همیشه به
432
00:14:17,120 –> 00:14:20,720
یک گره بعدی نیاز داریم و یک مرجع بعدی
433
00:14:20,720 –> 00:14:22,560
و این خواهد شد. شروع
434
00:14:22,560 –> 00:14:23,920
یک لیست دیگر
435
00:14:23,920 –> 00:14:25,199
که ممکن است شروع لیست خالی باشد
436
00:14:25,199 –> 00:14:27,440
درست در مورد اولین
437
00:14:27,440 –> 00:14:28,800
گره ای که ما
438
00:14:28,800 –> 00:14:31,360
این یکی را در اینجا ساختیم، به این صورت بود
439
00:14:31,360 –> 00:14:33,040
که یک لیست کاملاً جدید راه اندازی کردیم و گفتیم
440
00:14:33,040 –> 00:14:35,440
باشه ما مادر هستیم king یک گره جدید 210
441
00:14:35,440 –> 00:14:37,360
و سپس به لیست خالی ارجاع می دهد،
442
00:14:37,360 –> 00:14:39,760
اما بار دوم که
443
00:14:39,760 –> 00:14:41,279
سازنده گره را فراخوانی کردیم و یک
444
00:14:41,279 –> 00:14:42,560
گره جدید
445
00:14:42,560 –> 00:14:46,240
ساختیم که 110 روی آن قرار داده شده ا