線性表
/*
已知長度爲n的線性表A採用順序存儲結構。
設計一個時間複雜度爲O(n)、空間複雜度爲O(1)的算法,
該算法刪除線性表中所有值爲x的數據元素。
*/
/*
方法一:
找到第一個不相等的元素就放到鏈表第一個,第二個就放到第二個
*/
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
int data[100];
int length;
}SqList;
void CreateList(SqList *&L,int a[],int n);
void delect(SqList *&L,int x);
int main()
{
int i;
SqList *L;
int a[] = {1,2,1,2,3,2};
CreateList(L,a,6);
delect(*&L,2);
for( i = 0; i < L->length; i++)
printf("%d\n",L->data[i]);
return 0;
}
void CreateList(SqList *&L,int a[],int n) //順序表指針L
{
int i;
L = (SqList *)malloc(sizeof(SqList));
for( i=0; i<n; i++)
{
L->data[i]= a[i];
}
L->length = n;
}
void delect(SqList *&L,int x)
{
int k = 0;
int i = 0;
for( i = 0; i < L->length; i++)
{
if(L->data[i] != x)
{
L->data[k] = L->data[i];
k++;
}
}
L->length = k;
}
/*
方法二:將不爲x的元素前移k個位置,最後修改A的長度
*/
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
int data[6];
int length;
}SqList;
void CreateList(SqList *&L,int a[],int n);
void delect(SqList *&L,int x);
int main()
{
int i;
SqList *L;
int a[] = {1,2,1,2,3,2};
CreateList(L,a,6);
delect(L,2);
for( i = 0; i < L->length; i++)
printf("%d\n",L->data[i]);
return 0;
}
void CreateList(SqList *&L,int a[],int n) //順序表指針L
{
int i;
L = (SqList *)malloc(sizeof(SqList));
for( i=0; i<n; i++)
{
L->data[i]= a[i];
}
L->length = n;
}
void delect(SqList *&L,int x)
{
int k = 0;
int i;
for( i = 0; i < L->length; i++)
{
if( x == L->data[i])
{
k++;
}
else
{
L->data[i-k] = L->data[i];
}
}
L->length = L->length - k;
}