در این مطلب، ویدئو ساختارهای داده در پایتون: لیستهای پیوندی واحد — درج با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:00,000 –> 00:00:02,550
بسیار خوب، بنابراین در این سری از ویدیوها
2
00:00:02,550 –> 00:00:04,650
، ساختارهای داده لیست پیوندی را در نظر می گیریم،
3
00:00:04,650 –> 00:00:06,750
بنابراین فرض می کنم که
4
00:00:06,750 –> 00:00:08,760
شما آشنایی دارید، شاید
5
00:00:08,760 –> 00:00:10,800
قبلاً این نوع اشیاء را دیده اید و
6
00:00:10,800 –> 00:00:13,410
شاید کلاسی را که مدتی پیش از آن گرفته اید، دیده باشید.
7
00:00:13,410 –> 00:00:15,000
شما فقط می خواهید
8
00:00:15,000 –> 00:00:16,680
برای مصاحبه آماده شوید، بنابراین
9
00:00:16,680 –> 00:00:19,859
باید به عقب برگردید و این نوع ساختارهای داده را دوباره بررسی کنید،
10
00:00:19,859 –> 00:00:21,840
بنابراین در این سری از
11
00:00:21,840 –> 00:00:24,480
ویدیوها، انواع لیست های پیوندی را در نظر می گیریم،
12
00:00:24,480 –> 00:00:26,519
بنابراین لیست های پیوندی منفرد،
13
00:00:26,519 –> 00:00:28,230
این چیزها را دو برابر می کنند.
14
00:00:28,230 –> 00:00:30,029
هر یک از این
15
00:00:30,029 –> 00:00:32,820
اشیاء را با جزئیات مرور خواهیم کرد و مشاهده خواهیم کرد که چه
16
00:00:32,820 –> 00:00:34,860
نوع عملیاتی را میتوانید روی آنها انجام دهید
17
00:00:34,860 –> 00:00:37,980
و سپس
18
00:00:37,980 –> 00:00:40,410
این ساختارهای داده را در پایتون نیز پیادهسازی خواهیم کرد و همانطور
19
00:00:40,410 –> 00:00:42,750
که عملیات خاصی را برای
20
00:00:42,750 –> 00:00:44,430
این لیست انجام میدهم، آن را انتخاب خواهیم کرد. استراحت کنید
21
00:00:44,430 –> 00:00:46,110
و به ترمینال بروید تا ببینید چگونه میتوانیم
22
00:00:46,110 –> 00:00:48,570
عملاً با استفاده از این ایده آن عملیات را اجرا کنیم،
23
00:00:48,570 –> 00:00:52,050
بنابراین فقط برای تازه کردن،
24
00:00:52,050 –> 00:00:53,910
ابتدا در مورد لیستهای مرتبط با
25
00:00:53,910 –> 00:00:55,590
ارزش که اساسیترین نوع هستند صحبت میکنم. f
26
00:00:55,590 –> 00:00:58,590
لیست پیوندی انواع ساختارهای داده
27
00:00:58,590 –> 00:01:00,989
فقط برای ارائه یک نمای کلی از
28
00:01:00,989 –> 00:01:02,789
شکل ظاهری یک لیست پیوندی،
29
00:01:02,789 –> 00:01:05,188
یک نسخه بسیار ساده از یک
30
00:01:05,188 –> 00:01:07,590
لیست پیوندی را نشان می دهد که هر لیست پیوندی
31
00:01:07,590 –> 00:01:09,960
از گره ها تشکیل شده است، بنابراین این کادرها در اینجا
32
00:01:09,960 –> 00:01:12,600
همان چیزی هستند که ما آن را گره می نامیم و هر گره
33
00:01:12,600 –> 00:01:15,360
دارای دو جزء است، یکی داده نامیده می شود،
34
00:01:15,360 –> 00:01:17,490
زمانی که بعد نامیده می شود، بنابراین
35
00:01:17,490 –> 00:01:19,950
مؤلفه داده هر گره دارای این است و
36
00:01:19,950 –> 00:01:22,409
به یک گره در این لیست اجازه می دهد
37
00:01:22,409 –> 00:01:24,720
برخی از عناصر ارسال شده از داده را ذخیره کند، داده
38
00:01:24,720 –> 00:01:28,350
در اینجا فقط یک کاراکتر ABCD است، اما داده ها
39
00:01:28,350 –> 00:01:29,880
به این صورت هستند.
40
00:01:29,880 –> 00:01:32,250
ممکن است به طور کلی تر تفسیر شود، بنابراین می تواند
41
00:01:32,250 –> 00:01:33,600
رشته هایی باشد، می تواند کاراکترهایی باشد که
42
00:01:33,600 –> 00:01:34,829
اعداد می دهند، می تواند انواع دیگری از
43
00:01:34,829 –> 00:01:37,380
اشیاء باشد
44
00:01:37,380 –> 00:01:39,990
45
00:01:39,990 –> 00:01:42,479
46
00:01:42,479 –> 00:01:46,500
. که a را ذخیره می کند
47
00:01:46,500 –> 00:01:48,840
یک اشاره گر بعدی دارد
48
00:01:48,840 –> 00:01:50,820
که به گره بعدی در زنجیره اشاره می کند
49
00:01:50,820 –> 00:01:53,579
یا لیستی که B را ذخیره می کند و
50
00:01:53,579 –> 00:01:55,920
غیره بنابراین B این گره در اینجا ورودی بعدی دارد که
51
00:01:55,920 –> 00:01:58,200
ه این گره اشاره می کن
52
00:01:58,200 –> 00:02:03,149
. ورودی C و شروع لیست
53
00:02:03,149 –> 00:02:05,219
به عنوان سر نامیده می شود، بنابراین سر به
54
00:02:05,219 –> 00:02:07,259
نوعی جایی است که ما به آن نگاه می کنیم، بنابراین یک
55
00:02:07,259 –> 00:02:09,119
اشاره گر است که به شروع
56
00:02:09,119 –> 00:02:11,819
لیست اشاره می کند، همانطور که اگر بخواهیم
57
00:02:11,819 –> 00:02:13,890
لیست را طی کنیم، این سر
58
00:02:13,890 –> 00:02:15,390
که به آن نگاه می کند، اشاره می کند. هر یک از این گره ها
59
00:02:15,390 –> 00:02:16,890
و لیست باید
60
00:02:16,890 –> 00:02:19,290
با ما حرکت کنند تا بفهمیم در کجای
61
00:02:19,290 –> 00:02:20,610
لیست هستیم، بنابراین اگر بخواهیم لیست را تکرار
62
00:02:20,610 –> 00:02:21,870
کنیم، بعداً این را
63
00:02:21,870 –> 00:02:24,599
با جزئیات بیشتری خواهیم دید، نشانگر سر
64
00:02:24,599 –> 00:02:27,270
باید در امتداد مسیر حرکت کند. لیست
65
00:02:27,270 –> 00:02:30,360
برای به دست آوردن یا دسترسی به یک عنصر
66
00:02:30,360 –> 00:02:33,959
از لیست، آخرین مؤلفه یک
67
00:02:33,959 –> 00:02:36,569
لیست پیوندی منفرد این مفهوم تهی است،
68
00:02:36,569 –> 00:02:39,450
بنابراین انتهای هر لیست پیوندی با این ایده پوچ خاتمه می یابد،
69
00:02:39,450 –> 00:02:43,110
بنابراین در پایتون است،
70
00:02:43,110 –> 00:02:44,760
ما خواهیم دید که این فقط ما است. این را
71
00:02:44,760 –> 00:02:47,549
هیچ می نامیم، این فقط نشانگر بعدی
72
00:02:47,549 –> 00:02:49,980
آخرین گره در یک لیست پیوندی منفرد است که
73
00:02:49,980 –> 00:02:52,709
به این شی تهی اشاره می کند و این فقط به
74
00:02:52,709 –> 00:02:54,959
شما می گوید که پایان لیست
75
00:02:54,959 –> 00:02:56,519
خیلی سریع است فقط برای ارائه یک
76
00:02:56,519 –> 00:02:58,830
نمای کلی از نحوه پیوند و آرایه ها لیست
77
00:02:58,830 –> 00:03:02,010
ها متفاوت هستند این احتمالاً نوعی الف است
78
00:03:02,010 –> 00:03:03,209
نکته خوبی است که در پشت ذهن خود
79
00:03:03,209 –> 00:03:05,220
، لیست برجسته و پیوند خورده را در
80
00:03:05,220 –> 00:03:07,620
هنگام درج یا حذف برای یک
81
00:03:07,620 –> 00:03:09,989
آرایه نگه دارید، عملیات حذف درج
82
00:03:09,989 –> 00:03:12,900
در مرتبه n عملیات است و به
83
00:03:12,900 –> 00:03:15,330
این دلیل است که اگر در بدترین حالت
84
00:03:15,330 –> 00:03:16,830
نیاز به درج داشته باشیم عنصری در
85
00:03:16,830 –> 00:03:18,840
ابتدای آرایه که
86
00:03:18,840 –> 00:03:21,030
همه عناصر
87
00:03:21,030 –> 00:03:22,650
آرایه را به سمت راست تغییر میدهد، بنابراین میتوانیم
88
00:03:22,650 –> 00:03:24,150
برای عنصری که میخواهیم
89
00:03:24,150 –> 00:03:26,880
در سمت چپ یا ابتدای آرایه درج یا حذف کنیم، فضا ایجاد کنیم.
90
00:03:26,880 –> 00:03:29,220
با این حال، برای یک
91
00:03:29,220 –> 00:03:31,140
لیست پیوندی، زمانی که بدانیم در کجای
92
00:03:31,140 –> 00:03:32,790
لیست هستیم، اگر فقط لازم باشد
93
00:03:32,790 –> 00:03:35,310
عنصری را در آن لیست وارد یا حذف کنیم که
94
00:03:35,310 –> 00:03:37,109
یک عملیات زمان ثابت است و فقط
95
00:03:37,109 –> 00:03:39,450
شامل جابجایی نشانگرهای بعدی
96
00:03:39,450 –> 00:03:41,069
یا نشانگرهای قبلی به اطراف است،
97
00:03:41,069 –> 00:03:43,859
به این ترتیب ما می تواند
98
00:03:43,859 –> 00:03:46,500
عنصر را در فهرست وارد یا حذف کند یا عنصر را
99
00:03:46,500 –> 00:03:49,470
از لیست حذف کند و به عناصر دسترسی پیدا کند، بنابراین برای
100
00:03:49,470 –> 00:03:51,359
آرایه ها برای لیست های پیوندی عملکرد زمان ثابت خود را بهتر انجام می دهند،
101
00:03:51,359 –> 00:03:53,310
اگر
102
00:03:53,310 –> 00:03:54,870
آرایه ای را در فهرست قرار دهید، می تواند
103
00:03:54,870 –> 00:03:57,329
فوراً g اگر عنصری را
104
00:03:57,329 –> 00:03:59,880
که ورودی در آن ذخیره میشود، به این دلیل است که
105
00:03:59,880 –> 00:04:03,000
آرایهها به هم پیوسته هستند که این
106
00:04:03,000 –> 00:04:04,500
جدول کمی به جزئیات میپردازد و در مورد
107
00:04:04,500 –> 00:04:05,569
آن کمی به آن خواهیم پرداخت
108
00:04:05,569 –> 00:04:07,769
109
00:04:07,769 –> 00:04:09,930
.
110
00:04:09,930 –> 00:04:12,600
زیرا همانطور که در این لیست پیمایش
111
00:04:12,600 –> 00:04:14,310
می کنیم، اگر بخواهیم به این عنصر دسترسی
112
00:04:14,310 –> 00:04:16,918
داشته باشیم، باید از نشانگر
113
00:04:16,918 –> 00:04:19,320
سر کل لیست را
114
00:04:19,320 –> 00:04:20,250
بپیماییم تا بتواند واقعاً به
115
00:04:20,250 –> 00:04:24,210
آن گره لیست برسد و همانطور که
116
00:04:24,210 –> 00:04:25,620
قبل
117
00:04:25,620 –> 00:04:29,310
از افزایش در هنگام شما اشاره کردم. یک شی آرایه ایجاد کنید که
118
00:04:29,310 –> 00:04:31,590
در حافظه به هم پیوسته باشد که اجازه می دهد
119
00:04:31,590 –> 00:04:34,590
این زمان دسترسی ثابت باشد در حالی
120
00:04:34,590 –> 00:04:37,860
که لیست
121
00:04:37,860 –> 00:04:40,199
های پیوندی از حافظه پیوسته برخوردار نیستند، بنابراین اینها جداول هستند
122
00:04:40,199 –> 00:04:41,760
که احتمالاً باید در
123
00:04:41,760 –> 00:04:43,440
هنگام مبادله بین
124
00:04:43,440 –> 00:04:45,510
آرایه ها و آرایه ها در نظر داشته باشید. لیست های پیوندی اگر
125
00:04:45,510 –> 00:04:48,030
مشکلی به شما داده شد، ممکن است بخواهید در نظر بگیرید
126
00:04:48,030 –> 00:04:49,260
که آیا یک آرایه
127
00:04:49,260 –> 00:04:50,940
ساختار داده ترجیحی است یا یک
128
00:04:50,940 –> 00:04:53,729
لیست پیوندی یا فقط از این
129
00:04:53,729 –> 00:04:56,490
نوع مزایا و معایب
130
00:04:56,490 –> 00:04:57,510
آگاه باشید. نکته ای که ما می خواهیم به نحوه
131
00:04:57,510 –> 00:04:59,550
انجام در پایتون با یک لیست پیوندی نگاه کنیم این
132
00:04:59,550 –> 00:05:00,750
ایده درج است
133
00:05:00,750 –> 00:05:02,789
بنابراین چند راه مختلف وجود دارد که می توانیم
134
00:05:02,789 –> 00:05:05,160
دو لیست را وارد کنیم تا بتوانیم یک عنصر را
135
00:05:05,160 –> 00:05:06,570
به پشت لیست اضافه کنیم و می توانیم یک عنصر اضافه کنیم.
136
00:05:06,570 –> 00:05:08,430
در قسمت جلو، میتوانیم یک
137
00:05:08,430 –> 00:05:10,889
عنصر را در بین گرهها اضافه کنیم، بنابراین
138
00:05:10,889 –> 00:05:12,570
نگاهی به هر یک از این عملیات
139
00:05:12,570 –> 00:05:13,949
خواهیم داشت و نحوه
140
00:05:13,949 –> 00:05:17,430
اجرای آنها را در پایتون بررسی خواهیم کرد، اولین مورد
141
00:05:17,430 –> 00:05:20,100
اضافه کردن یک عنصر به انتهای آن است. لیستی
142
00:05:20,100 –> 00:05:22,380
که ما آن را الحاق یا ضمیمه کردن آن
143
00:05:22,380 –> 00:05:25,199
به انتهای لیست می نامیم، بنابراین اگر یک
144
00:05:25,199 –> 00:05:26,789
لیست پیوندی دارید که شبیه این است و
145
00:05:26,789 –> 00:05:29,400
ورودی دارید، بیایید بگوییم گره دیگری
146
00:05:29,400 –> 00:05:31,650
در اینجا گره است، اگر بخواهیم
147
00:05:31,650 –> 00:05:34,020
این را به آن اضافه کنیم، e اگر بخواهیم این را به آن اضافه کنیم. لیست در اینجا
148
00:05:34,020 –> 00:05:36,120
نتیجه آن لیستی خواهد بود که
149
00:05:36,120 –> 00:05:38,789
ما با یک گوه بین این و
150
00:05:38,789 –> 00:05:42,120
جزء تهی لیست داریم و این
151
00:05:42,120 –> 00:05:44,910
همان چیزی است که ضمیمه به نظر می رسد بنابراین در واقع
152
00:05:44,910 –> 00:05:47,970
قبل از اینکه به انواع
153
00:05:47,970 –> 00:05:49,770
روش های درج دیگر برویم، اجازه دهید عملاً برویم.
154
00:05:49,770 –> 00:05:51,150
ahead یک لیست پیوندی
155
00:05:51,150 –> 00:05:53,490
پیاده سازی پایتون را کد کنید و شروع کنید برای فکر کردن به
156
00:05:53,490 –> 00:05:55,349
اینکه چگونه میتوانیم واقعاً این عملیات را انجام دهیم،
157
00:05:55,349 –> 00:05:58,560
بنابراین من یک فایل پایتون
158
00:05:58,560 –> 00:06:00,750
در اینجا ایجاد کردم به نام لیست پیوندی سلام و کاری که
159
00:06:00,750 –> 00:06:02,010
میخواهیم انجام دهیم این است که
160
00:06:02,010 –> 00:06:04,260
دو کلاس ایجاد میکنیم که یک کلاس
161
00:06:04,260 –> 00:06:06,840
برای شی گره در یک لیست پیوندی و
162
00:06:06,840 –> 00:06:09,030
یکی که یک کلاس برای
163
00:06:09,030 –> 00:06:11,160
خود لیست پیوندی واقعی است که از
164
00:06:11,160 –> 00:06:13,889
گرهها تشکیل شده است، بنابراین برای اینکه به شکل اینجا برگردیم،
165
00:06:13,889 –> 00:06:16,680
فقط برای تازه کردن یک گره
166
00:06:16,680 –> 00:06:18,330
، کلاسی برای ظاهر یک
167
00:06:18,330 –> 00:06:20,550
شی گره ایجاد میکنیم. این
168
00:06:20,550 –> 00:06:22,199
چیزی است که دارای یک داده و
169
00:06:22,199 –> 00:06:24,090
مؤلفه بعدی است و سپس میخواهیم
170
00:06:24,090 –> 00:06:26,070
یک کلاس برای یک لیست پیوندی ایجاد
171
00:06:26,070 –> 00:06:27,720
کنیم، یک لیست پیوندی منفرد فعلاً این لیست پیوندی را فراخوانی میکند
172
00:06:27,720 –> 00:06:29,520
و این فقط
173
00:06:29,520 –> 00:06:32,010
از گرهها تشکیل شده است، بنابراین اجازه دهید
174
00:06:32,010 –> 00:06:33,630
این را کوچک کنم و اجازه دهید ادامه دهید و کلاسهای خود را ایجاد کنید،
175
00:06:33,630 –> 00:06:36,360
بنابراین کلاسی به نام
176
00:06:36,360 –> 00:06:39,300
node در سازنده این
177
00:06:39,300 –> 00:06:41,250
کلاس ایجاد میکنیم و آرگومان self و همچنین دادهها را به آن میدهیم،
178
00:06:41,250 –> 00:06:43,490
زیرا این به
179
00:06:43,490 –> 00:06:46,889
یاد داشته باشید که هر گره
180
00:06:46,889 –> 00:06:49,620
از next و داده تشکیل میشود، بنابراین ما انجام
181
00:06:49,620 –> 00:06:52,050
خواهیم داد این است که می گوییم داده های خود نقطه برابر با داده است
182
00:06:52,050 –> 00:06:53,699
که همان چیزی است که ما برای تعریف
183
00:06:53,699 –> 00:06:55,830
یک شی از این کلاس وارد می کنیم و سپس می
184
00:06:55,830 –> 00:06:58,590
گوییم که خود dot next برابر است با هیچ، بنابراین
185
00:06:58,590 –> 00:07:00,360
این چیزی است که هنگام
186
00:07:00,360 –> 00:07:02,160
استفاده از گره تنظیم می کنیم. در ابتدا
187
00:07:02,160 –> 00:07:04,889
آن را روی none تنظیم می کنیم، بنابراین این تقریباً تمام
188
00:07:04,889 –> 00:07:07,080
چیزی است که برای کلاس گره نیاز داریم، اکنون اجازه دهید به
189
00:07:07,080 –> 00:07:09,800
جلو برویم و یک کلاس لیست پیوندی تعریف کنیم و
190
00:07:09,800 –> 00:07:12,090
در اینجا کاری که می خواهیم انجام دهیم این است که در
191
00:07:12,090 –> 00:07:16,250
سازنده دوباره خود را خواهیم داشت و
192
00:07:16,250 –> 00:07:18,870
سپس ما یک مؤلفه خواهیم داشت که اگر
193
00:07:18,870 –> 00:07:22,259
دوباره به شکل برگردیم
194
00:07:22,259 –> 00:07:23,909
شروع لیست اگر
195
00:07:23,909 –> 00:07:25,770
بخواهیم لیست پیوندی را دوباره شروع کنیم به
196
00:07:25,770 –> 00:07:27,090
آن نشانگر سر می دهیم تا نشانگر
197
00:07:27,090 –> 00:07:29,310
سر به اولین گره لیست اشاره کند و ما در
198
00:07:29,310 –> 00:07:31,440
ابتدا فقط آن را برابر با هیچ
199
00:07:31,440 –> 00:07:35,220
یا تهی قرار می دهیم، بنابراین می گوییم سر نقطه خود
200
00:07:35,220 –> 00:07:39,210
برابر با هیچ است، بنابراین کاری که اکنون می توانیم انجام دهیم این است
201
00:07:39,210 –> 00:07:41,819
که می توانیم دوباره به ارائه برگردیم
202
00:07:41,819 –> 00:07:43,800
و اولین کاری که اکنون می خواهیم انجام دهیم.
203
00:07:43,800 –> 00:07:46,380
که ما یک نوع لیست پیوندی از
204
00:07:46,380 –> 00:07:47,880
راهاندازی زیرساخت با این دو
205
00:07:47,880 –> 00:07:50,909
کلاس داریم زیرا میخواهیم ورودیهایی
206
00:07:50,909 –> 00:07:53,849
را به این لیست اضافه کنیم. اجازه دهید در واقع قبل
207
00:07:53,849 –> 00:07:57,509
از انجام این کار، اجازه دهید من فقط به
208
00:07:57,509 –> 00:07:59,580
قسمت اصلی برنامه بروم و بیایید یک
209
00:07:59,580 –> 00:08:01,590
شی لیست پیوندی تعریف کنیم تا بگوییم
210
00:08:01,590 –> 00:08:06,150
لیست پیوندی برابر با لیست پیوند شده است و سپس
211
00:08:06,150 –> 00:08:09,210
در نهایت کاری که انجام خواهیم داد این است که
212
00:08:09,210 –> 00:08:12,210
می گوییم لیست پیوندی نقطه اضافه می شود و سپس
213
00:08:12,210 –> 00:08:14,690
چیزهایی به آن می دهیم، مثلاً یک
214
00:08:14,690 –> 00:08:19,849
لیست پیوندی نقطه اضافه می کنیم، مثلاً B و
215
00:08:19,849 –> 00:08:22,199
سپس می خواهیم راهی برای
216
00:08:22,199 –> 00:08:24,960
چاپ واقعی عناصر
217
00:08:24,960 –> 00:08:27,240
لیست داشته باشیم، پس بیایید ادامه دهیم و در واقع
218
00:08:27,240 –> 00:08:31,530
تابع append را ایجاد می کنیم، بنابراین
219
00:08:31,530 –> 00:08:32,969
یک متد ایجاد می کنیم که یک متد کلاسی است
220
00:08:32,969 –> 00:08:35,700
به نام dot append prepend و
221
00:08:35,700 –> 00:08:39,120
در یک گره به
222
00:08:39,120 –> 00:08:40,950
این لیست اضافه می شود و این گره
223
00:08:40,950 –> 00:08:44,790
از یک جزء داده تشکیل شده است، بنابراین ما
224
00:08:44,790 –> 00:08:46,740
نیز باید آن مولفه داده را منتقل کنیم،
225
00:08:46,740 –> 00:08:50,190
بنابراین بیایید به شکل خود بازگردیم، بنابراین وقتی
226
00:08:50,190 –> 00:08:52,020
این لیست را داریم با فرض اینکه
227
00:08:52,020 –> 00:08:53,070
فهرستی در اینجا
228
00:08:53,070 –> 00:08:55,320
داریم، باید چند کار را انجام دهیم تا
229
00:08:55,320 –> 00:08:57,930
ابتدا آن را اصلاح کنیم، باید بررسی کنیم که
230
00:08:57,930 –> 00:09:00,360
آیا این لیست کاملاً خالی است یا خیر.
231
00:09:00,360 –> 00:09:02,790
اگر برای اولین بار یک گره را در لیست اضافه کنیم خالی نیست
232
00:09:02,790 –> 00:09:04,740
ما باید به
233
00:09:04,740 –> 00:09:06,420
طور جداگانه به آن مورد رسیدگی کنیم، سپس اگر از
234
00:09:06,420 –> 00:09:08,340
قبل یک لیست داریم و
235
00:09:08,340 –> 00:09:10,470
آن را به انتهای لیست اضافه می کنیم، بیایید
236
00:09:10,470 –> 00:09:12,360
این مورد ساده تر را در نظر بگیریم که در واقع چیزی
237
00:09:12,360 –> 00:09:13,710
238
00:09:13,710 –> 00:09:16,230
نداریم، هیچ لیستی نداریم و فقط میخواهیم
239
00:09:16,230 –> 00:09:19,050
اولین گره را به آن لیست اضافه کنیم، بیایید این را
240
00:09:19,050 –> 00:09:21,210
کوچک کنیم، بنابراین اولین کاری که
241
00:09:21,210 –> 00:09:24,030
میخواهیم انجام دهیم این است که در هر
242
00:09:24,030 –> 00:09:26,910
صورت میخواهیم یک گره جدید تعریف کنیم و
243
00:09:26,910 –> 00:09:29,130
از کلاس گره خود برای انجام این کار استفاده
244
00:09:29,130 –> 00:09:31,530
خواهیم کرد. این گره جدید را برابر با یک
245
00:09:31,530 –> 00:09:34,230
شی گره تعریف می کنیم و آن را در داده ارسال می کنیم بنابراین
246
00:09:34,230 –> 00:09:36,990
این شی گره جدید که اکنون داریم
247
00:09:36,990 –> 00:09:40,860
یک گره است و شامل فیلد داده
248
00:09:40,860 –> 00:09:44,280
این گره است که ورودی داده هایی را دارد
249
00:09:44,280 –> 00:09:46,110
که به این تابع اضافه کردیم. و
250
00:09:46,110 –> 00:09:47,520
میخواهیم این گره جدید را که به تازگی
251
00:09:47,520 –> 00:09:50,820
ایجاد کردهایم و به لیست اضافه کنیم،
252
00:09:50,820 –> 00:09:52,710
بنابراین اگر میخواهیم
253
00:09:52,710 –> 00:09:55,260
خالی بودن لیست را بررسی کنیم اولین کاری که
254
00:09:55,260 –> 00:09:58,440
میخواهیم انجام دهیم این است که بتوانیم سر را بررسی کنیم.
255
00:09:58,440 –> 00:10:01,080
لیست در حال حاضر
256
00:10:01,080 –> 00:10:04,350
هیچ مؤلفه ای ندارد، بنابراین می توانیم بگوییم که سر نقطه خود
257
00:10:04,350 –> 00:10:10,680
هیچ کدام نیست اگر این درست است en این
258
00:10:10,680 –> 00:10:12,090
اساساً به این معنی است که در آنجا چیزی
259
00:10:12,090 –> 00:10:15,480
وجود ندارد که سر نشانگر
260
00:10:15,480 –> 00:10:17,400
به هیچ چیز اشاره نمی کند و بنابراین
261
00:10:17,400 –> 00:10:19,500
هیچ مؤلفه ای در لیست
262
00:10:19,500 –> 00:10:21,900
وجود ندارد و گرهی در لیست وجود ندارد اگر
263
00:10:21,900 –> 00:10:23,130
اینطور است، آنچه می توانیم انجام دهیم این است که می توانیم
264
00:10:23,130 –> 00:10:25,080
تنظیم کنیم. نشانگر سر به گره جدیدی
265
00:10:25,080 –> 00:10:26,130
که به تازگی ایجاد
266
00:10:26,130 –> 00:10:28,530
کردیم، بنابراین میتوانیم بگوییم که سر نقطه خود برابر
267
00:10:28,530 –> 00:10:31,620
با گره جدید است و اگر
268
00:10:31,620 –> 00:10:34,020
اینطور است، میتوانیم آن را برگردانیم، بنابراین این
269
00:10:34,020 –> 00:10:36,840
مورد نسبتاً آسان است، بنابراین
270
00:10:36,840 –> 00:10:39,180
اگر لیست موجود است، اکنون چه کنیم خالی نیست و
271
00:10:39,180 –> 00:10:41,940
ورودی های دیگری در لیست وجود دارد که چگونه با آن برخورد
272
00:10:41,940 –> 00:10:46,460
کنیم آنچه که می توانیم انجام دهیم این است که می توانیم بگوییم
273
00:10:46,460 –> 00:10:48,510
بیایید به شکل برگردیم زیرا
274
00:10:48,510 –> 00:10:49,830
فکر می کنم این کار را کمی آسان تر
275
00:10:49,830 –> 00:10:51,960
می
276
00:10:51,960 –> 00:10:54,240
کند. در اینجا، جایی که گره جدید
277
00:10:54,240 –> 00:10:56,850
باید درج شود، فرض کنید
278
00:10:56,850 –> 00:10:58,710
وضعیتی مانند این داریم که در آن از
279
00:10:58,710 –> 00:11:01,140
قبل یک لیست داریم و این گره جدید را
280
00:11:01,140 –> 00:11:03,150
داریم که ایجاد کردهایم و میخواهیم
281
00:11:03,150 –> 00:11:05,220
این را به لیست اضافه کنیم. می توانیم
282
00:11:05,220 –> 00:11:07,350
انجام دهیم این است که ما می توانیم از اینجا شروع کنیم
283
00:11:07,350 –> 00:11:09,810
که نشانگر سر از h شروع می شود پیش از این،
284
00:11:09,810 –> 00:11:12,090
میتوانیم نشانگر سر را از طریق هر یک
285
00:11:12,090 –> 00:11:13,800
از این مؤلفههای موجود در فهرستها، هر یک از
286
00:11:13,800 –> 00:11:15,870
این گرهها در لیست حرکت دهیم و وقتی
287
00:11:15,870 –> 00:11:17,460
به انتها رسیدیم، وقتی به null
288
00:11:17,460 –> 00:11:19,260
رسیدیم، میدانیم که به پایان رسیدهایم، میدانیم
289
00:11:19,260 –> 00:11:20,940
که اینجا همان جایی است که میخواهیم در واقع
290
00:11:20,940 –> 00:11:23,730
گره جدید را وارد می کنیم، بنابراین ابتدا باید بفهمیم
291
00:11:23,730 –> 00:11:26,640
که چگونه
292
00:11:26,640 –> 00:11:28,890
با استفاده از نشانگر سر از یک گره به گره دیگر حرکت کنیم و هنگامی که
293
00:11:28,890 –> 00:11:30,570
به مکانی رسیدیم که می خواهیم
294
00:11:30,570 –> 00:11:32,520
گره جدید را وارد کنیم،
295
00:11:32,520 –> 00:11:34,080
در واقع چگونه آن را قرار دهیم. گره جدید
296
00:11:34,080 –> 00:11:38,850
وارد آن مکان شود، بنابراین کاری که میتوانیم انجام دهیم این است
297
00:11:38,850 –> 00:11:42,630
که بتوانیم تعریف کنیم، فرض کنیم چه چیزی را
298
00:11:42,630 –> 00:11:45,600
آخرین گره صدا میزنیم و این در ابتدا
299
00:11:45,600 –> 00:11:47,370
برابر با سر خواهد بود، بنابراین ما در
300
00:11:47,370 –> 00:11:49,740
ابتدای لیست هستیم، این متغیر را برای فراخوانی تعریف میکنیم.
301
00:11:49,740 –> 00:11:51,150
آخرین گره زیرا این همان چیزی است
302
00:11:51,150 –> 00:11:53,670
که در نهایت به آن اشاره می کند، اما در
303
00:11:53,670 –> 00:11:54,990
لحظه ای که در ابتدای لیست شروع می شود
304
00:11:54,990 –> 00:11:57,270
و ما می خواهیم انجام دهیم این
305
00:11:57,270 –> 00:12:00,390
است که می خواهیم در آن لیست حرکت کنیم تا
306
00:12:00,390 –> 00:12:02,310
در حالی که نشانگر سر به تهی اشاره نمی کند.
307
00:12:02,310 –> 00:12:04,620
برای حرکت از طریق start off
308
00:12:04,620 –> 00:12:06,420
head در اینجا این نشانگر t است o null
309
00:12:06,420 –> 00:12:09,690
هیچ حرکتی به مورد بعدی ندارد این است نه نه
310
00:12:09,690 –> 00:12:11,670
311
00:12:11,670 –> 00:12:13,950
فلان و غیره تا زمانی که به این برسیم و سپس وقتی به آن
312
00:12:13,950 –> 00:12:16,470
رسیدیم آن وقت است که پیش می رویم و گره جدید خود
313
00:12:16,470 –> 00:12:18,480
را در لیست وارد می کنیم تا چه کاری می توانیم انجام دهیم این است که
314
00:12:18,480 –> 00:12:23,370
می توانیم بگوییم در حالی که آخرین گره نقطه بعدی است، بنابراین
315
00:12:23,370 –> 00:12:26,460
اساساً در حالی که این تهی نیست، در حالی
316
00:12:26,460 –> 00:12:29,190
که اشاره گر بعدی گره ای که در
317
00:12:29,190 –> 00:12:32,310
حال حاضر روی آن هستیم خالی نیست، می خواهیم
318
00:12:32,310 –> 00:12:34,620
در این حلقه ادامه دهیم، بنابراین آنچه را که می
319
00:12:34,620 –> 00:12:35,970
خواهیم انجام دهیم این حلقه این است که ما فقط
320
00:12:35,970 –> 00:12:37,890
نشانگر سر را به
321
00:12:37,890 –> 00:12:40,410
سمت راست حرکت می دهیم، بنابراین می گوییم آخرین گره
322
00:12:40,410 –> 00:12:44,040
برابر است با آخرین نقطه گره بعدی و سپس
323
00:12:44,040 –> 00:12:47,430
بعد از اینکه این حلقه به نتیجه رسید، آخرین گره
324
00:12:47,430 –> 00:12:51,060
به آخرین گره اشاره می کند، بنابراین دوباره ما
325
00:12:51,060 –> 00:12:54,870
در ابتدا به سر اشاره کنید در حالی که ما در حالی
326
00:12:54,870 –> 00:12:57,270
که اشاره گر بعدی به null اشاره نمی کند،
327
00:12:57,270 –> 00:13:00,390
ما به این کار ادامه می دهیم اساساً فقط
328
00:13:00,390 –> 00:13:02,070
نشانگر سر را به سمت راست حرکت می دهیم، بنابراین در حالی
329
00:13:02,070 –> 00:13:04,320
که خیر نیست، اشاره گر بعدی تهی
330
00:13:04,320 –> 00:13:07,140
نیست، این شروع می شود اینجا
331
00:13:07,140 –> 00:13:09,990
نقطه بعدی است یا no no move here this next
332
00:13:09,990 –> 00:13:11,820
pointing to null no it
333
00:13:11,820 –> 00:13:13,950
point to see this a next point است نه،
334
00:13:13,950 –> 00:13:15,990
به D اشاره می کند، این مورد بعدی است که
335
00:13:15,990 –> 00:13:18,720
به null اشاره می کند بله، بنابراین ما اکنون در آن
336
00:13:18,720 –> 00:13:20,850
نقطه هستیم، بنابراین چه کاری باید انجام دهیم، باید
337
00:13:20,850 –> 00:13:21,420
338
00:13:21,420 –> 00:13:24,900
گره را وارد کنیم تا بتوانیم بگوییم اگر نه،
339
00:13:24,900 –>