<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      實驗報告4(使用順序表和單鏈表,進(jìn)行有序表的合并)

      一、實驗?zāi)康模?/strong>

      熟練使用順序表和單鏈表,進(jìn)行有序表的合并。

      二、實驗儀器或設(shè)備:

      操作系統(tǒng):Windows11

      編程環(huán)境:Dev-cpp 5.11

      三、算法總體設(shè)計

      (一)使用單鏈表進(jìn)行有序表的合并

      1. 打印鏈表

      2. 合并兩個有序鏈表

      3. 釋放鏈表內(nèi)存

      (二)使用順序表進(jìn)行有序表的合并

      1.利用順序表合并有序表

      2. 釋放合并后數(shù)組的內(nèi)存

      四、實驗步驟(包括主要步驟、命令分析等)

      (一)使用單鏈表進(jìn)行有序表的合并

       1 #include <iostream>
       2  using namespace std;
       3 // 單鏈表節(jié)點定義
       4 struct ListNode {
       5     int val;
       6     ListNode* next;
       7     ListNode(int x) : val(x), next(NULL) {}
       8 }; 
       9 // 打印鏈表
      10 void printList(ListNode* head) {
      11     ListNode* current = head;
      12     while (current != NULL) {
      13        cout << current->val << " ";
      14         current = current->next;
      15     }
      16    cout << endl;
      17 } 
      18 // 合并兩個有序鏈表
      19 ListNode* mergeSortedLists(ListNode* l1, ListNode* l2) {
      20     // 創(chuàng)建一個啞節(jié)點作為新鏈表的頭部
      21     ListNode dummy(0);
      22     ListNode* tail = &dummy;
      23     while (l1 != NULL && l2 != NULL) {
      24         if (l1->val <= l2->val) {
      25             tail->next = l1;
      26             l1 = l1->next;
      27         } else {
      28             tail->next = l2;
      29             l2 = l2->next;
      30         }
      31         tail = tail->next;
      32     }
      33     // 添加剩余節(jié)點
      34     tail->next = (l1 != NULL) ? l1 : l2; 
      35     return dummy.next;
      36 }
      37 // 創(chuàng)建鏈表
      38 ListNode* createList(int* values, int size) {
      39     if (size == 0) return NULL;
      40     ListNode* head = new ListNode(values[0]);
      41     ListNode* current = head;
      42     for (int i = 1; i < size; ++i) {
      43         current->next = new ListNode(values[i]);
      44         current = current->next;
      45     }
      46     return head;
      47 }
      48 // 釋放鏈表內(nèi)存
      49 void freeList(ListNode* head) {
      50     ListNode* current = head;
      51     while (current != NULL) {
      52         ListNode* next = current->next;
      53         delete current;
      54         current = next;
      55     }
      56 }
      57 int main() {
      58     // 創(chuàng)建第一個有序鏈表
      59     int arr1[] = {1, 3, 5, 7};
      60     ListNode* list1 = createList(arr1, 4);
      61     // 創(chuàng)建第二個有序鏈表
      62     int arr2[] = {2, 4, 6, 8};
      63     ListNode* list2 = createList(arr2, 4);
      64     // 合并兩個有序鏈表
      65     ListNode* mergedList = mergeSortedLists(list1, list2);
      66     // 打印合并后的鏈表
      67     cout << "合并后的鏈表: ";
      68     printList(mergedList);
      69     freeList(mergedList); // 合并后的鏈表
      70     return 0;
      71 }

      (二)使用順序表進(jìn)行有序表的合并

       1 #include <cstdlib> 
       2 #include <iostream>
       3  using namespace std;
       4 int* mergeSortedArrays(int* arr1, int size1, int* arr2, int size2) {
       5     int totalSize = size1 + size2;
       6     int* mergedArray = (int*)std::malloc(totalSize * sizeof(int)); // 動態(tài)分配內(nèi)存
       7     if (!mergedArray) {
       8         // 處理內(nèi)存分配失敗的情況
       9         cerr << "Memory allocation failed" << endl;
      10         exit(EXIT_FAILURE);
      11     }
      12     int i = 0, j = 0, k = 0;
      13     while (i < size1 && j < size2) {
      14         if (arr1[i] < arr2[j]) {
      15             mergedArray[k++] = arr1[i++];
      16         } else {
      17             mergedArray[k++] = arr2[j++];
      18         }
      19     }
      20     while (i < size1) {
      21         mergedArray[k++] = arr1[i++];
      22     }
      23     while (j < size2) {
      24         mergedArray[k++] = arr2[j++];
      25     }
      26     return mergedArray; // 返回指向合并后數(shù)組的指針
      27 }
      28 int main() {
      29     int arr1[] = {1, 3, 5, 7};
      30     int arr2[] = {2, 4, 6, 8};
      31     int size1 = sizeof(arr1) / sizeof(arr1[0]);
      32     int size2 = sizeof(arr2) / sizeof(arr2[0]);
      33 
      34     int* mergedArray = mergeSortedArrays(arr1, size1, arr2, size2);
      35     cout << "合并后的鏈表: ";
      36     for (int i = 0; i < size1 + size2; ++i) {
      37        cout << mergedArray[i] << " ";
      38     }
      39     cout << endl;
      40   free(mergedArray);
      41 
      42     return 0;
      43 }

      (1)使用單鏈表運行的結(jié)果如圖所示

      第一個有序鏈表為1,3,5,7。

      第二個有序鏈表為2,4,6,8。

      更具題意進(jìn)行合并則為:1,2,3,4,5,6,7,8。

      2)使用順序表運行的結(jié)果如圖所示

      第一個順序表為:1,3,5,7。

      第二個順序表為:2,4,6,8。

      更具題意進(jìn)行合并則為:1,2,3,4,5,6,7,8。 

      總結(jié):通過本次實驗,我掌握了使用順序表和單鏈表進(jìn)行有序表合并的基本方法和技巧。順序表合并主要依賴于數(shù)組元素的比較和插入操作,而單鏈表合并則需要正確連接節(jié)點并處理尾節(jié)點。 這些知識和技能對于后續(xù)的數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)和算法設(shè)計具有重要的參考價值...

      posted @ 2025-10-10 22:41  ZDhr  閱讀(23)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 在线观看热码亚洲av每日更新| 免费视频成人片在线观看| 国产大学生粉嫩无套流白浆| 国产人妇三级视频在线观看| 亚洲精品国产摄像头| 亚洲精品韩国一区二区| 亚洲免费视频一区二区三区| 日韩国产中文字幕精品| 狠狠色综合久久狠狠色综合| 最新国产精品亚洲| 久久久精品午夜免费不卡| 一区二区三区鲁丝不卡| 亚洲精品一区国产精品| 国产AV无码专区亚洲AV紧身裤| 丁香花在线观看免费观看图片| аⅴ天堂中文在线网| 亚洲国产精品成人综合久| 亚洲一区国色天香| 通榆县| 亚洲成人av一区二区| 亚洲成人免费一级av| 啪啪av一区二区三区| 老司机精品影院一区二区三区| 国产精品久久久久久久专区| 人人澡人摸人人添| 美女扒开尿口让男人桶| 亚洲综合小综合中文字幕| 国产精品一区在线蜜臀| 国产一区二区午夜福利久久| 亚洲永久一区二区三区在线| 国产精品一区二区日韩精品| 在线观看国产一区亚洲bd| 国产精品无遮挡猛进猛出| 青青草国产精品日韩欧美| 亚洲福利精品一区二区三区| 欧美日韩精品一区二区视频| 国产精品国语对白一区二区| 亚洲人午夜射精精品日韩| 国产一区二区三区精品综合 | 免费视频成人片在线观看| 中文字幕日韩精品人妻|