數據結構:順序表的實現

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10 	// 鏈表元素個數最大值 
#define ElemType int	// 鏈表數據類型 

typedef struct{
	ElemType *data;
	int MaxSize;
	int length;
}SeqList;

// 初始化順序表 
void InitList(SeqList &list, int initSize)
{
	list.data = (ElemType*) malloc(sizeof(ElemType) * initSize);
	for(int i = 0; i < N; i++){
		list.data[i] = 0;	// 初始化所有數據爲0 
	}
	list.MaxSize = initSize;
	list.length = 0;
}
// 增加順序表的長度 len
void IncreaseList(SeqList &list, int len)
{
	ElemType* tmp =  list.data;
	list.data = (ElemType*) malloc(sizeof(ElemType) * (list.MaxSize + len));
	for(int i = 0; i < list.length; i++){
		list.data[i] = tmp[i];
	}
	list.MaxSize = list.MaxSize + len;
	free(tmp);
}
// 順序表插入元素, 在第idx的位置上插入元素e 
bool ListInsert(SeqList &list, int idx, ElemType e)
{
	// 如果順序表已滿或者插入位置超出順序表返回false 
	if(list.length >= list.MaxSize || idx >= list.MaxSize || idx < 0){
		return false;
	} 
	// 如果插入位置在所有已有元素之後 則插入到末尾 
	if(idx > list.length){ 
		idx = list.length;
	}
	for(int i = list.length; i > idx; i--){
		list.data[i] = list.data[i-1];
	} 
	list.data[idx] = e;
	list.length++;	// 順序表長度+1 
	return true; 
}
// 順序表刪除元素, 刪除idx位置的元素 
bool ListDelete(SeqList &list, int idx)
{
	if(idx < 0 || idx >= list.length){
		return false;
	}
	for(int i = idx; i < list.length -1; i++){
		list.data[i] = list.data[i+1];
	}
	list.length--;
	return true;
}
// 順序表查找 獲取第下標爲i的元素 
ElemType GetElem(SeqList &list, int i) 
{
	return list.data[i];
}
// 順序表查找 查找元素e是否存在並返回下標
int LocateElem(SeqList &list, ElemType e)
{
	int idx = -1;
	for(int i = 0; i < list.length; i++){
		if(list.data[i] == e){
			idx = i;
			break;
		}
	}
	return idx;
}
int main()
{
	SeqList list;
	InitList(list, 10);
	for(int i = 0; i < list.length; i++){
		printf("%d\n", list.data[i]);
	}
	IncreaseList(list, 20);
	for(int i = 0; i < 10; i++){
		ListInsert(list, i, i);
	}
	ListDelete(list, 3);
	ListInsert(list, 3, 3); 
	for(int i = 0; i < list.length; i++){
		printf("%d\n", list.data[i]);
	}
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章