習題3.3 線性表元素的區間刪除 (20分)


給定一個順序存儲的線性表,請設計一個函數刪除所有值大於min而且小於max的元素。刪除后表中剩余元素保持順序存儲,並且相對位置不能改變。

函數接口定義:

List Delete( List L, ElementType minD, ElementType maxD ); 
 

其中List結構定義如下:

typedef int Position; typedef struct LNode *List; struct LNode { ElementType Data[MAXSIZE]; Position Last; /* 保存線性表中最后一個元素的位置 */ }; 
 

L是用戶傳入的一個線性表,其中ElementType元素可以通過>、=、<進行比較;minDmaxD分別為待刪除元素的值域的下、上界。函數Delete應將Data[]中所有值大於minD而且小於maxD的元素刪除,同時保證表中剩余元素保持順序存儲,並且相對位置不變,最后返回刪除后的表。

裁判測試程序樣例:

#include <stdio.h> #define MAXSIZE 20 typedef int ElementType; typedef int Position; typedef struct LNode *List; struct LNode { ElementType Data[MAXSIZE]; Position Last; /* 保存線性表中最后一個元素的位置 */ }; List ReadInput(); /* 裁判實現,細節不表。元素從下標0開始存儲 */ void PrintList( List L ); /* 裁判實現,細節不表 */ List Delete( List L, ElementType minD, ElementType maxD ); int main() { List L; ElementType minD, maxD; int i; L = ReadInput(); scanf("%d %d", &minD, &maxD); L = Delete( L, minD, maxD ); PrintList( L ); return 0; } /* 你的代碼將被嵌在這里 */ 
 

輸入樣例:

10
4 -8 2 12 1 5 9 3 3 10
0 4
 

輸出樣例:

4 -8 12 5 9 10 

解題思路:遍歷整個線性表,並記錄和保存小於等於minD和大於等於maxD的元素
設置2個標識i,j ,其中i不斷的右移,j指向左端,若L->data[i]符合條件,則將L->data[j]=L->data[j];j++
最后將 L->last = j-1;

List Delete( List L, ElementType minD, ElementType maxD )
{
    Position n = L->Last ;
    int j=0;
    for(int i=0;i<=n;i++)
    {
        if(L->Data[i]<=minD || L->Data[i] >= maxD)//注意條件
        {
            L->Data[j]=L->Data[i];
            j++;
        }
    }

    L->Last = j-1;

    return  L;
}//歡迎評論

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM