#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