已知一個順序表L,其中的元素遞增有序排列,設計一個演算法,插入一個元素x(x為t型)後保持該順序表仍然遞增有序排列(假設插入操作總能成功)c實現。

惠hiuj發表於2024-04-22
/********************************************************************************************************
*
*	file name:	Zqh_splist_4.22.1.c
* 	author	 :	keyword2024@163.com
* 	date	 :	2024/04/22
* 	function :	已知一個順序表L,其中的元素遞增有序排列,設計一個演算法,插入一個元素x(x為t型)後保持該順序表仍然遞增有序排列(假設插入操作總能成功)。
*	note	 :	考研題
*	
*  Copyright (c)  2023-2025   keyword2024@163.com    All right Reserved
* ******************************************************************************************************/




#define MAX_SIZE 100

// 定義順序表結構體
typedef struct {
    int data[MAX_SIZE];
    int length;
} SeqList;

//最佳化前
//遞增排序      
void  SeqList_Insert(SeqList *L,int x)
{
	int temp = -1; //記錄待插入元素的下標

	//遍歷順序表,找到插入位置,比較元素
	for (int i = 0; i <= last; ++i)
	{
		if (x < L[i])
		{
			temp = i;
			break;
		}
	}

	if( -1 == temp)
	{
		L[last+1] = x;
		return;
	}

	//把待插入位置的後繼元素向後移動
	for (int i = last; i >= temp; i--)
	{
		L[i+1] = L[i];
	}

	L[temp] = x;
}



// 最佳化後
// 在遞增有序的順序表中插入元素 x
void SeqList_Insert(SeqList *L, int x) {
    int i, j;
    for (i = 0; i < L->length; i++) {
        if (L->data[i] >= x) {
            break;
        }
    }
    for (j = L->length; j > i; j--) {
        L->data[j] = L->data[j - 1];
    }
    L->data[i] = x;
    L->length++;
}

//在演算法檢測時,需要找特殊的情況,列如:0  表頭  表尾  邊界值

相關文章