الجدول الخطي
الجداول الخطية هي أبسط هياكل البيانات الأكثر استخدامًا. وهي تسلسلات محدودة تتكون من عناصر البيانات الفردية n (العقد). من بينها ، رقم N عناصر البيانات هو طول الجدول. عندما يكون n صفر ، يصبح جدولًا فارغًا. عادة ما يتم تسجيل جدول خطي غير فارغ على النحو التالي:
(A1 ، A2 ، ... ، AI-1 ، AI ، AI+1 ، ... ، AN)
1. التخزين المتسلسل وخوارزمية الجداول الخطية
يشير التخزين المتسلسل للجدول الخطي إلى تخزين عناصر البيانات في الجدول الخطي في مجموعة من وحدات التخزين المستمرة مع عناوين بترتيبها المنطقي. يسمى الجدول الخطي المخزن بهذه الطريقة جدول متسلسل.
1. التعريف الهيكلي لجدول الطلب
الفئة العامة seqlist { / * المساحة الأولية هي 10 * / private static int list_size = 10 ؛ /* يتم استخدام بيانات الصفيف لتخزين العناصر*/ private int [] البيانات ؛ /* الجدول الحالي طويل ، العدد الفعلي للعناصر المخزنة*/ طول الباحث الخاص ؛ } 2. إدراج العملية
تشير تشغيل إدراج الجدول المتسلسل إلى إدخال عنصر جديد بين العنصر I-1 والعنصر I-Th في الجدول الخطي. نظرًا لأن العناصر المجاورة لجدول التسلسل متاخمة أيضًا في الهيكل المادي ، يجب أن تخضع علاقات التخزين المادية الخاصة بهم أيضًا بتغييرات مقابلة. ما لم يكن i = n+1 ، يجب نقل جميع العناصر التي تبدأ من العنصر i-th من جدول الطلب الأصلي إلى الوراء بموجب موقف واحد على التوالي.
/** * أدخل عنصرًا جديدًا قبل موقع I-TH في NODE LIST NODE * PARAM LIST TABLE * PARAM I INSERT * PARAM NODE Element */Public void insertlist (SeqList List ، int I ، int Node) {if (i <1 || i> list.length + 1) {system.println ( يعود؛ } if (list.length> = list_size) {system.out.println ("overflow") ؛ يعود؛ } لـ (int j = list.length - 1 ؛ j> = i - 1 ؛ j -) { / * ابدأ من العنصر الأخير وارتفع مرة واحدة تلو الأخرى * / list.data [j+1] = list.data [j] ؛ } /* insert عنصر جديد* / list.data [i-1] = node ؛ / * إضافة 1 إلى طول الجدول */ list.length ++ ؛ } 3. حذف العملية
يشير تشغيل الحذف للجدول المتسلسل إلى حذف العنصر I-TH في الجدول. على عكس عملية الإدراج ، يقوم الإدراج بتحريك العنصر للخلف ، وتنقل عملية الحذف العنصر للأمام.
/*** حذف العنصر i-th في قائمة جدول الطلبات وإرجاع العنصر المحذوف* جدول تسلسل قائمة* param i element* @return node*/public int deletelist (seqlist list ، int i) {int node = 0 ؛ if (i <0 || i> list.length) {system.out.println ("خطأ الموضع") ؛ عقدة العودة. } node = list.data [i-1] ؛ لـ (int j = i ؛ j <list.length ؛ j ++) { /* element forward* / list.data [j-1] = list.data [j] ؛ } list.length -؛ عودة العقدة ؛} 4. جدول الترتيب العكسي
أولاً ، استخدم نصف طول الجدول كعدد من المرات في حلقة التحكم ، وتبادل العنصر الأخير في الجدول بترتيب العنصر الأول ، وتبادل العنصر الأخير بترتيب العنصر الثاني ، وهكذا حتى يتم الانتهاء من البورصة.
/*** جدول التسلسل العكسي* param قائمة جدول الطلب الأصلي* جدول تسلسل RETURN بعد عكس*/seqlist public (قائمة seqlist) {int node ؛ طول int = list.length/2 ؛ من أجل (int i = 0 ؛ i <length ؛ i ++) { /* exchantrical exchange elements* / int j = list.length - 1 - i ؛ العقدة = list.data [i] ؛ list.data [i] = list.data [j] ؛ list.data [j] = node ؛ } قائمة الإرجاع ؛ } 2. تخزين السلسلة وخوارزمية الجداول الخطية
قد تكون مساحة التخزين لعناصر البيانات في بنية تخزين السلسلة التي تخزن الجداول الخطية مستمرة أو متقطعة ، لذلك لا يمكن الوصول إلى العقد في القائمة المرتبطة بشكل عشوائي. يعد تخزين السلسلة أحد أكثر طرق التخزين شيوعًا.
عند استخدام بنية تخزين السلسلة لتمثيل كل عنصر بيانات ، بالإضافة إلى تخزين معلومات العنصر نفسه ، هناك حاجة أيضًا إلى عنوان تخزين العناصر اللاحقة. يسمى الجدول الخطي الممثل بطريقة التخزين قائمة مرتبطة.
5. التعريف الهيكلي للقائمة المرتبطة
LinkList الفئة العامة { /* حقل البيانات* / بيانات char الخاصة ؛ /* العنصر المتتالي*/ Linklist الخاص التالي ؛} 6. خوارزمية بناء الجدول
تبدأ طريقة إدخال الرأس بجدول فارغ ، يقرأ البيانات مرارًا وتكرارًا ، وتنشئ عقدة جديدة ، وتخزن بيانات القراءة في حقل البيانات في العقدة الجديدة ، ثم إدراج العقدة الجديدة على رأس القائمة المرتبطة الحالية حتى تنتهي.
/*** إنشاء جدول بواسطة insertion header* param chars charch array* return قائمة مرتبطة واحدة*/public linklist createlistf (char [] chars) {linklist node ؛ LinkList Head = null ؛ لـ (char ch: chars) { /* تقدم للحصول على عقدة جديدة* / node = new linklist () ؛ node.data = ch ؛ /* تشير إلى Node*/ node.next = Head ؛ الرأس = العقدة ؛ } /* العودة إلى عقدة الرأس* / رأس الإرجاع ؛} 7. خوارزمية بناء طريقة إدراج الذيل
ترتيب العقد في جدول إدخال الرأس هو عكس الطلب عند الإدخال. إذا كان ترتيب الإدخال متسقًا ، فيمكن استخدام طريقة إدخال الذيل.
/*** طريقة إدراج الذيل لإنشاء جدول* param chars charace array* @return قائمة مرتبطة*/public linklist createListr (char [] chars) {linklist node ؛ LinkList Head = null ؛ Linklist الخلفية = فارغة ؛ لـ (char ch: chars) {node = new LinkList () ؛ node.data = ch ؛ if (head == null) { /* العقدة الجديدة هي عقدة الرأس* / head = node ؛ } else { /* تشير العقدة السابقة إلى العقدة الجديدة* / re re re re re re re re re re re re re re re re re re reeal } /* يشير ذيل الجدول إلى العقدة الجديدة* / الخلفية = العقدة ؛ } /* العودة إلى عقدة الرأس* / رأس الإرجاع ؛}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.