已知長度為n的線性表A采用順序存儲結構,請寫一個時間復雜度為O(n)、空間復雜度為O(1)的算法,該算法可刪除線性表中所有值為item的數據元素。


#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"
typedef int dataType;
typedef struct {
	int data[100];//數據
	int length;//長度
}SeqList;

SeqList *init();
void fill(SeqList *L);
void show(SeqList *L);
void delSeqList(SeqList *L,int i);
void destorylist(SeqList *L);

//主函數
int main(){
	SeqList *L;
	int e;
	L=init();
	fill(L);
	show(L);
	printf("\n你要進行刪除的數據的值為:");
	scanf("%d",&e);
	printf("進行刪除表中所有值位%d的數據\n",e);
	delSeqList(L,e);
	show(L);
	destorylist(L);
}
//初始化表格
SeqList *init()
{
	SeqList *L;
	//申請空間
	L=(SeqList *)malloc(sizeof(SeqList));
	//長度為0
	L->length=0;
	return L;
}
//內容填充
void fill(SeqList *L)
{
	int i=0;
	printf("以下開始填充內容\n");
	printf("數組的數量:");
	scanf("%d",&L->length);
	while(i<L->length)
	{
			printf("第【%d】位:",i);
			scanf("%d",&L->data[i]);
			i++;
	}
}
	
//展示表格
void show(SeqList *L)
{
	int i;
	//依次展示數組內容
	for(i=0;i<L->length;i++)
	    printf("第[%d]位為%d   ",i,L->data[i]);
}
//銷毀表
void destorylist(SeqList *L)
{
	free(L);//釋放空間
}

//刪除所有值為e的數據
void delSeqList(SeqList *L,int e)
{
  int j = 0,i=0;
    for(; i<L->length;i++)
    {
		//如果不等於就按順序排下去,等於就不執行
		if(L->data[i] != e)
        {
            L->data[j] = L->data[i];
            j++;
        }
    }
    L->length = j;
}

時間復雜度為O(n):說明只能用依次循環。

O(1)是最低的空間復雜度,也就是耗耗空間與輸入數據大小無關,無論輸入數據增大多少倍,耗時/耗空間都不變。 表示該程序所占用的空間和所用數據量無關。

空間復雜度:一個算法在運行過程中臨時占用的存儲空間的度量。 

代碼思路:

原本是想先尋找目標值,將數組依次向前覆蓋,但發現如果有多個跟目標值一樣的數,算法會出錯。后來進行更改,發現完善之后,算法的時間復雜度會是O(n2)。

然后就想到把不是目標值的數,全部重新排到數組中,去除目標值,時間復雜度便成為了O(n)。

 

 輸出

 輸入

6
2
3
2
6
2
5


免責聲明!

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



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