Share to: share facebook share twitter share wa share telegram print page

Mảng (cấu trúc dữ liệu)

Trong khoa học máy tính, cấu trúc dữ liệu mảng hoặc mảng là một cấu trúc dữ liệu bao gồm một nhóm các phần tử giá trị hoặc biến, mỗi phần tử được xác định ít nhất bằng một chỉ số (index) hoặc khóa (key). Mảng được lưu theo cách có thể tính được vị trí của các phần tử từ giá trị của một tuple chỉ số bằng một biểu thức toán học.[1][2][3]

Thí dụ, một mảng có 10 biến số nguyên, với các chỉ số từ 0 đến 9, có thể lưu trong 10 word tại địa chỉ bộ nhớ 2000, 2004, 2008,... 2036. Do đó, phần tử có chỉ số i sẽ nằm ở địa chỉ 2000 + 4 × i.[4]

Do khái niệm ma trận trong toán học có thể được biểu diễn bằng một bảng hai chiều nên đôi khi mảng hai chiều cũng được gọi là ma trận. Một số trường hợp, khái niệm vector được dùng để chỉ mảng, mặc dù bộ (tuple) là khái niệm chính xác hơn về mặt toán học. Mảng thường được dùng để hiện thực các bảng, nhất là bảng tìm kiếm. Từ bảng đôi khi có cùng nghĩa với mảng.

Mảng là một trong những cấu trúc dữ liệu cũ và quan trọng nhất, và hầu hết các chương trình đều dùng nó. Các cấu trúc dữ liệu khác cũng được hiện thực bằng mảng, thí dụ như danh sách hoặc chuỗi. Nó rất hiệu quả trong việc tận dụng cách đánh địa chỉ trên máy tính. Trong hầu hết các máy tính hiện đại và các thiết bị lưu trữ ngoài, bộ nhớ là chuỗi một chiều các word, và chỉ số của nó chính là địa chỉ. Bộ xử lý, đặc biệt là bộ xử lý vector, thường tối ưu hóa các tác vụ trên mảng.

Sự hữu dụng của mảng nằm ở chỗ chỉ số của các phần tử có thể tính toán được vào lúc chương trình đang chạy. Tính năng này cho phép một lệnh lặp có thể xử lý một số lượng lớn các phần tử trong mảng. Do đó, các phần tử trong cấu trúc mảng cần phải có cùng kích thước và cùng kiểu dữ liệu. Tập hợp các bộ chỉ số và địa chỉ của các phần tử (cũng như công thức tính địa chỉ các phần tử) thường,[3][5] nhưng không phải luôn luôn,[2] cố định khi mảng đang được sử dụng.

Khái niệm mảng thường dùng có nghĩa là kiểu dữ liệu mảng được cung cấp bởi hầu hết các ngôn ngữ lập trình cấp cao, nó bao gồm tập hợp các giá trị hoặc biến có thể lựa chọn bằng một hoặc nhiều chỉ số được tính toán trong lúc chạy. Kiểu dữ liệu mảng thường được hiện thực bằng cấu trúc mảng; tuy nhiên một số ngôn ngữ lập trình có thể hiện thực bằng bảng băm, cây tìm kiếm hoặc các cấu trúc dữ liệu khác.

Khi mô tả các giải thuật, khái niệm này cũng được dùng để chỉ mảng liên kết, một mô hình lý thuyết khoa học máy tính (kiểu dữ liệu trừu tượng hay ADT) để sử dụng các tính chất thiết yếu của mảng.

Lịch sử

Các máy tính kỹ thuật số đầu tiên dùng chương trình được viết bằng ngôn ngữ máy để tạo và truy xuất cấu trúc mảng cho các bảng dữ liệu, vector và tính toán ma trận, và các mục đích khác. Von Neumann viết chương trình sắp xếp mảng (sắp xếp trộn) vào năm 1945, khi đang xây dựng chương trình lưu trữ máy tính đầu tiên.[6]p. 159 Đánh chỉ số cho mảng ban đầu được dùng trong mã tự sửa đổi, và sau đó dùng trong thanh ghi chỉ sốtruy xuất giáng tiếp. Một số máy tính lớn thiết kế vào thập niên 1960, như Burroughs B5000 và hậu duệ của nó, có những lệnh đặc biệt để đánh chỉ số cho mảng bao gồm kiểm tra biên của chỉ số.[cần dẫn nguồn]

Hợp ngữ nói chung không có hỗ trợ đặc biệt cho mảng ngoài việc dùng các hỗ trợ từ phần cứng. Ngôn ngữ lập trình cấp cao đầu tiên, bao gồm FORTRAN (1957), COBOL (1960), và ALGOL 60 (1960), có hỗ trợ mảng nhiều chiều, và sau đó là C (1972). Trong C++ (1983) có các class template cho mảng nhiều chiều, với số lượng chiều là cố định trong lúc chương trình đang chạy[3][5], cũng như các mảng có số chiều thay đổi được khi chương trình đang chạy.[2]

Ứng dụng

Mảng được dùng để hiện thực các vector và các ma trận cũng như các loại bảng chữ nhật. Nhiều cơ sở dữ liệu từ nhỏ đến lớn chứa (hoặc bao gồm) các mảng một chiều mà các phần tử là các bản ghi.

Mảng cũng được dùng để hiện thực các cấu trúc dữ liệu khác, như đống, bảng băm, hàng đợi hai đầu, hàng đợi, ngăn xếp, xâuVList.

Một hoặc nhiều mảng lớn đôi khi được dùng để giả lập cấp phát bộ nhớ động trong chương trình, nhất là cấp phát memory pool.

Mảng có thể dùng để xác định một phần hoặc toàn bộ luồng thực thi của chương trình nhiều câu lệnh IF như là một cách thu gọn (nếu không sẽ lặp lại). Trong trường hợp này, nó được biết như là bảng điều khiển và được dùng kết hợp với mục tiêu xây dựng trình thông dịch, chương trình có luồng thực thi thay đổi tùy theo giá trị trong mảng. Mảng có thể chứ các con trỏ tới chương trình con (hoặc số chương trình con tương ứng có thể được xử lý bằng lệnh SWITCH) - để chỉnh hướng thực thi của chương trình.

Định danh cho phần tử và công thức tính địa chỉ

Mảng một chiều

Khi các đối tượng dữ liệu được lưu trữ trong một mảng, các đối tượng riêng lẻ được chon thông qua một chỉ số (index) thường là một biến số nguyên không âm. Các chỉ số này còn được gọi là chỉ số dưới (subscript). Một chỉ số ánh xạ giá trị của mảng đến một đối tượng được lưu trữ.

Có ba cách để đánh chỉ số cho các phần tử trong mảng:

0 (đánh chỉ số từ không)
Phần tử đầu tiên sẽ được đánh chỉ số là 0.[7]
1 (đánh chỉ số từ một)
Phần tử đầu tiên sẽ được đánh chỉ số là 1.
n (đánh chỉ số từ n)
Chỉ số cơ sở của một mảng có thể được chọn tuỳ ý. Thông thường các ngôn ngữ lập trình cho phép đánh chỉ số từ n cũng sẽ cho phép các giá trị chỉ số âm.

Mảng nhiều chiều

Dope vector

Compact layout

Thay đổi kích thước mảng

Công thức tính địa chỉ phi tuyến tính

Hiệu quả

Sự hiệu quả so với các cấu trúc dữ liệu khác

So với danh sách liên kết, việc truy cập đến một phần tử trong mảng nhanh hơn với độ phức tạp là O(1).

Tuy nhiên, để xoá một phần tử không phải là phần tử cuối thì sử dụng cấu trúc mảng không hiệu quả. Bởi vì công việc này cần tốn thời gian cho việc dịch chuyển các phần tử còn lại lấp vào chỗ trống của mảng.

Ý nghĩa của số chiều

Số chiều của mảng tương ứng với số chỉ số (index) cần để xác định được phần tử đó.

Ví dụ:

Trong mảng một chiều a[N] với N là số phần tử, a[i] biểu diễn phần tử thứ i (i < N) của mảng.

Trong mảng hai chiều a[N][M] với N, M là giới hạn của mỗi chiều tương ứng, a[i][j] biểu diễn phần tử ở hàng i cột j của mảng.

Chú thích

  1. ^ Black, Paul E. (ngày 13 tháng 11 năm 2008). “array”. Dictionary of Algorithms and Data Structures. National Institute of Standards and Technology. Truy cập ngày 22 tháng 8 năm 2010.
  2. ^ a b c Bjoern Andres; Ullrich Koethe; Thorben Kroeger; Hamprecht (2010). "Runtime-Flexible Multi-dimensional Arrays and Views for C++98 and C++0x". arΧiv:1008.2909 [cs.DS]. 
  3. ^ a b c Garcia, Ronald; Lumsdaine, Andrew (2005). “MultiArray: a C++ library for generic programming with arrays”. Software: Practice and Experience. 35 (2): 159–188. doi:10.1002/spe.630. ISSN 0038-0644.
  4. ^ David R. Richardson (2002), The Book on Data Structures. iUniverse, 112 pages. ISBN 0-595-24039-9, ISBN 978-0-595-24039-5.
  5. ^ a b T. Veldhuizen. Arrays in Blitz++. In Proc. of the 2nd Int. Conf. on Scientific Computing in Object-Oriented Parallel Environments (ISCOPE), LNCS 1505, pages 223-220. Springer, 1998.
  6. ^ Donald Knuth, The Art of Computer Programming, vol. 3. Addison-Wesley
  7. ^ “Array Code Examples - PHP Array Functions - PHP code”. Computer Programming Web programming Tips. Bản gốc lưu trữ ngày 13 tháng 4 năm 2011. Truy cập ngày 8 tháng 4 năm 2011. In most computer languages array index (counting) starts from 0, not from 1. Index of the first element of the array is 0, index of the second element of the array is 1, and so on. In array of names below you can see indexes and values.

Tham khảo

Read other articles:

Restrepo Municipio Panorámica de Restrepo. BanderaEscudo Otros nombres: Cuna de la cultura Calima RestrepoLocalización de Restrepo en Colombia RestrepoLocalización de Restrepo en Valle del CaucaCoordenadas 3°49′18″N 76°31′22″O / 3.8216666666667, -76.522777777778Entidad Municipio • País  Colombia • Departamento Valle del Cauca • Subregión CentroAlcalde Armando Vélez Vélez(2020-2023)Eventos históricos   • Fundación 1 de dicie…

Die Synode der Evangelischen Kirche in Deutschland ist ein Organ der Evangelischen Kirche in Deutschland (EKD) mit Sitz in Hannover-Herrenhausen. Die Aufgaben der Synode sind in Artikel 23 der Grundordnung der EKD beschrieben. Sie beschließt Kirchengesetze und wählt zusammen mit der Kirchenkonferenz den Rat der EKD. Inhaltsverzeichnis 1 Zusammensetzung und Arbeitsweise 2 Amtszeiten der Präsides 3 Wichtige Synoden 4 Weblinks 5 Fußnoten Zusammensetzung und Arbeitsweise Laut Artikel 24 der Grun…

2023 Russian airstrike in Ukraine Hroza missile attackPart of the attacks on civilians in the Russian invasion of UkraineHroza after the missile strikeLocationHroza, Kharkiv Oblast, UkraineDate5 October 2023 (2023-10-05) 1:15 p.m. (UTC+02:00)TargetUkrainian civiliansAttack typeMissile strikeDeaths59[1]Injured7Perpetrators RussiaMotiveAttack on a memorial service of an Ukrainian soldier which Russia believed would attract his colleagues vteRussian invasion of UkraineNo…

市役所前停留場 ホーム しやくしょまえ Shiyakusho-mae ◄I03・N03 水族館口 (0.2 km) (0.3 km) 朝日通 I05・N05►所在地 鹿児島県鹿児島市山下町北緯31度35分48.45秒 東経130度33分28.46秒 / 北緯31.5967917度 東経130.5579056度 / 31.5967917; 130.5579056 (市役所前停留場)駅番号 ●I04●N04所属事業者 鹿児島市交通局所属路線 鹿児島市電第一期線(1系統・2系統)キロ

У Вікіпедії є статті про інші географічні об’єкти з назвою Луїз. Місто Луїзангл. Louise Координати 32°58′54″ пн. ш. 90°35′30″ зх. д. / 32.98170000002777158° пн. ш. 90.59170000002778522° зх. д. / 32.98170000002777158; -90.59170000002778522Координати: 32°58′54″ пн. ш. 90°35′30″ зх. д.࿯…

يفتقر محتوى هذه المقالة إلى الاستشهاد بمصادر. فضلاً، ساهم في تطوير هذه المقالة من خلال إضافة مصادر موثوق بها. أي معلومات غير موثقة يمكن التشكيك بها وإزالتها. (أبريل 2019) هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (أ…

Mécleuves Mécleuves (Frankreich) Staat Frankreich Region Grand Est Département (Nr.) Moselle (57) Arrondissement Metz Kanton Le Pays messin Gemeindeverband Metz Métropole Koordinaten 49° 3′ N, 6° 16′ O49.04256.27Koordinaten: 49° 3′ N, 6° 16′ O Höhe 192–292 m Fläche 12,88 km² Einwohner 1.187 (1. Januar 2020) Bevölkerungsdichte 92 Einw./km² Postleitzahl 57245 INSEE-Code 57454 Vorlage:Infobox Gemeinde in Frankreich/Wartun…

Cet article est une ébauche concernant le catch et une personnalité britannique. Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants. Pour les articles homonymes, voir Tighe. James TigheDonnées généralesNationalité BritanniqueNaissance 27 mars 1982 (41 ans)ChichesterTaille entre 5′ 8″ (1,73 m)[1] et 5′ 10″ (1,78 m)[2],[3]Poids entre 200 lb (91 kg)[2] et 280 lb (127…

العلاقات الإكوادورية النيكاراغوية الإكوادور نيكاراغوا   الإكوادور   نيكاراغوا تعديل مصدري - تعديل   العلاقات الإكوادورية النيكاراغوية هي العلاقات الثنائية التي تجمع بين الإكوادور ونيكاراغوا.[1][2][3][4][5] مقارنة بين البلدين هذه مقارنة عامة وم…

Queen of England (1445–61), (1470–71) For the 13th-century French countess, see Margaret, Countess of Anjou. Margaret of AnjouDetail from the Talbot Shrewsbury BookQueen consort of EnglandTenure23 April 1445 – 4 March 14613 October 1470 – 11 April 1471Coronation30 May 1445Queen consort of France (disputed) Tenure23 April 1445 – 19 October 1453Born23 March 1430Pont-à-Mousson, Duchy of Bar, Holy Roman EmpireDied25 August 1482 (aged 52)Dampierre-sur-Loire, Anjou, FranceBur…

Ethnic group from Assam AhomTotal population1,600,000+[1]Regions with significant populations    Assam1,464,000    Arunachal Pradesh100,000LanguagesAssamese,[2] formerly AhomReligionMajority: HinduismMinority:Ahom religionRelated ethnic groupsTai peoples Sukapha Kshetra Part of a series on theCulture of Assam HistoryProto-historic Pragjyotisha Kingdom Classical Kamarupa Kingdom Medieval Dimasa–Kachari Kingdom Kamata Kingdom Sutiya Kingdom…

1960s British television series This article does not cite any sources. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: The Man in Room 17 – news · newspapers · books · scholar · JSTOR (October 2017) (Learn how and when to remove this template message) The Man in Room 17Title cardGenreCrime DramaCreated byRobin ChapmanStarringRichard VernonMichael AldridgeDenholm Elli…

A Yarra Valley Water stall at a community festival in Melbourne. Yarra Valley Water is the largest of three Victorian Government owned retail water corporations that provides drinking water and sewerage services to over two million people and over 58,000 businesses in the northern and eastern suburbs of Melbourne. The water distributed by Yarra Valley Water is supplied by Melbourne Water, as is the infrastructure. Oversight is provided by the Department of Energy, Environment and Climate Action.…

2005 studio album by TonedeffArchetypeStudio album by TonedeffReleasedApril 5, 2005 (2005-04-05)GenreHip hopLength65:23LabelQN5 MusicProducerTonedeffVersifierKnoEliteE-LDomingoTonedeff chronology Underscore(2004) Archetype(2005) Polymer(2016) Singles from Archetype Politics / DisappointedReleased: 2004 Archetype is the debut solo studio album by American rapper Tonedeff. It was released on QN5 Music on April 5, 2005.[1] Critical reception Professional ratingsReview…

Upcoming video game Video gameTom Clancy's The Division HeartlandDeveloper(s)Red Storm EntertainmentPublisher(s)UbisoftDirector(s)Keith EvansProducer(s)Tony SturtzelWriter(s)Felix DulaySeriesTom Clancy's The DivisionEngineSnowdropPlatform(s)PlayStation 4PlayStation 5WindowsXbox OneXbox Series X/SGenre(s)Third-person shooterMode(s)Multiplayer Tom Clancy's The Division Heartland is an upcoming free-to-play third person shooter action game developed by Red Storm Entertainment and published by Ubiso…

Các khu vực bầu cử Lập pháp trong Quốc hội khóa 15 của Philippines cùng số đại biểu đại diện Khu vực bầu cử Lập pháp của Philippines là việc phân chia những người đại diện cho các tỉnh và thành phố trong Hạ viện Philippines. Thành phần đầu tiên của các khu vực bầu cử lập pháp được quy định trong Hiến pháp. Những thay đổi về thành phần của các khu vực bầu cử Lập pháp sau đó đư…

Artikel ini tidak memiliki referensi atau sumber tepercaya sehingga isinya tidak bisa dipastikan. Tolong bantu perbaiki artikel ini dengan menambahkan referensi yang layak. Tulisan tanpa sumber dapat dipertanyakan dan dihapus sewaktu-waktu.Cari sumber: Kopi sumatra – berita · surat kabar · buku · cendekiawan · JSTOR Gaya atau nada penulisan artikel ini tidak mengikuti gaya dan nada penulisan ensiklopedis yang diberlakukan di Wikipedia. Bantulah memperbaik…

Chuck is an American spy action-comedy-drama television series created by Josh Schwartz and Chris Fedak. It premiered on the terrestrial television network NBC on September 24, 2007, airing on Mondays at 8:00 pm ET.[1][2] Chuck centers on Chuck Bartowski (played by Zachary Levi), an average computer-whiz-next-door, who receives an encoded e-mail from an old college friend now working in the CIA; the message embeds the only remaining copy of the world's greatest spy secrets i…

Public company in Hamburg Hamburger Hochbahn AGTypePublicIndustrypassenger transporturban and suburban passenger land transport Founded1911FounderSiemens & Halske and AEG (Allgemeine Elektrizitäts-gesellschaft)HeadquartersHamburg, GermanyArea servedHamburg Metropolitan RegionServicesPublic transportOwnerFree and Hanseatic City of Hamburg (100%)Number of employees4,800SubsidiariesBeNex GmbHmetronom Eisenbahngesellschaft (25.1%)...Websitehttp://www.hochbahn.de/ Hamburger Hochbahn AG (HHA…

This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: PlayStation Broadband Navigator – news · newspapers · books · scholar · JSTOR (June 2022) (Learn how and when to remove this template message) PlayStation Broadband Navigator Logo PlayStation Broadband Navigator (also referred to as BB Navigator and PSBBN) was a s…

Kembali kehalaman sebelumnya