順序表就是邏輯上相鄰的數據元素物理上也相鄰,連續(xù)存儲
時間復雜度:最好O(1),最差O(n)
特點:
定義順序表
typedef int SLDataType;
typedef struct SeqList
{SLDataType *a;//動態(tài)開辟的數組
size_t size;//有效數據個數
size_t capacity;//容量大小
} SeqList;
初始化順序表
void SeqListInit(SeqList *psl)
{assert(psl !=NULL);//斷言,防止傳進來的指針為空
psl->a = NULL;//初始順序表為空
psl->size = 0;//初始數據個數為0
psl->capacity = 0;//初始空間容量0
}
銷毀順序表
void SeqListDestroy(SeqList *psl)
{assert(psl != NULL);
free(psl->a);//釋放malloc給數組a開辟的空間
psl->a = NULL;
psl->size = 0;
psl->capacity = 0;
}
檢查順序表是否滿,方便增容
void CheckCapacity(SeqList *psl)
{assert(psl !=NULL);
if(psl->size == psl->capacity)
{size_t newcapacity;
if(psl->capacity == 0)
{newcapacity = psl->capacity = 4;
}
else
{newcapacity = 2*psl->capacity;
}
SLDataType *p = (SLDataType *)relloc(psl->,newcapacity);
if (NULL == p)
{perror("relloc");
exit(-1);
}
psl->a = p;
psl->capacity = newcapacity;
}
}
順序表頭插
voidSeqlistPushFront(SeqList *psl,SLDataType x)
{assert(psl);
CheckCapacity(psl);
int i = 0;
for(i = psl->size-1;i>=0;i++)
{psl->a[i + 1] = psl->a[i];
}
psl->a[0] = x;
psl->size++;
}
順序表尾插
void SeqListPushBack(SeqList *psl,SLDataType num)
{assert(psl != NULL);
CheckCapacity(psl);
psl->a[psl->size] = x;
psl->size++;
}
順序表頭刪
void SeqListPopFront(SeqList *psl)
{assert(psl);
int i = 0;
for(i = 0;isize;i++)
{psl->a[i] = psl->a[i+1];
}
psl->size--;
}
順序表尾刪
void SeqListPopBack(SeqList *psl)
{assert(psl);
assert(psl->size >0);//順序表不能為空
//根據SLDataType類型,給0值
psl->a[psl->size] = 0;
psl->size--;
}
順序表查找指定值
int SeqListFind(const SeqList *psl,SLDataType x)
{assert(psl);
int i = 0;
for(i=0;isize;i++)
{if(psl->a[i] == x)
{return i;
}
return -1;
}
}
在順序表指定下標位置插入數據
void SeqListInsert(SeqList *psl,size_t pos,SLDataType x)
{assert(psl);
assert(pos >= 0 && pos<= psl->size);
CheckCapacity(psl);
size_t i = 0;
for(i=psl->size;i>pos;i--)
{psl->a[i] = psl->a[i-1];
}
psl->a[pos] = x;
psl->size++;
}
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧