데이터 구조 표 (1) 순서 표 의 실현 (C 언어)

순서 표 는 물리 적 주소 로 연 속 된 저장 장치 로 데이터 요 소 를 순서대로 저장 하 는 선형 구조 로 일반적인 상황 에서 배열 로 저장 합 니 다.배열 에서 데이터 의 첨삭 과 수정 을 완성 하 다.
표, 창고, 대기 열, 나무, 그림 등 데이터 구조 에 대해 우 리 는 모두 순서 구조 나 체인 구 조 를 선택 하여 실현 할 수 있다. 다음은 표 의 순서 실현 을 보 여 준다.
이게 너무 쉬 워 서 코드 를 바로 올 리 는 거 예요.
데이터 구조
typedef struct SeqList
{
	DATATYPE* data; //          
	size_t size;    //       
	size_t capicity;  //        
}SeqList;

실현 인터페이스
void SeqListInit(SeqList* list, size_t capacity);
//      
int CheckCapacity(SeqList* list);
//         ,        
void SeqListDestory(SeqList* list);
//     
void SeqListPrint(SeqList* list);
//     
void SeqListPushBack(SeqList* list, DATATYPE x);
//  
void SeqListPushFront(SeqList* list, DATATYPE x);
//  
int SeqListFind(SeqList* list, DATATYPE x);
//     
void SeqListPopBack(SeqList* list);
//  
void SeqListPopFront(SeqList* list);
//  
void SeqListInsert(SeqList* list, size_t pos, DATATYPE x);
//      
void SeqListErase(SeqList* list, size_t pos);
//      

순서 표 초기 화
void SeqListInit(SeqList* list, size_t capacity)
{
	assert(list);
	DATATYPE* temp;
	temp = (DATATYPE*)malloc(capacity * sizeof(DATATYPE));
	if (NULL == list)
	{
		printf("     
"); return; } list->data = temp; list->size = 0; list->capicity = capacity; }

순서 표 의 소각
void SeqListDestory(SeqList* list)
{
	assert(list);
	list->size = 0;
	list->capicity = 0;
	free(list->data);
	list->data = NULL;
}

순서 표 가 가득 찼 는 지 확인 하고, 가득 차 면 자동 으로 용량 을 늘 립 니 다.
int CheckCapacity(SeqList* list)
{
	assert(list);
	DATATYPE* temp;
	if (list->capicity == list->size)
	{
		temp = realloc(list, 2 * LISTSIZE * sizeof(DATATYPE));
		if (NULL == temp)
		{
			printf("    
"); return 0; } else { list->data = temp; printf("
"); } } return 1; }

인쇄 순서 표
void SeqListPrint(SeqList* list)
{
	assert(list);
	size_t i = 0;
	for (i = 0; i < list->size; i++)
	{
		printf("%d ", list->data[i]);
	}
	printf("
"); }

플러그
void SeqListPushFront(SeqList* list, DATATYPE x)
{
	assert(list);
	int i;
	if (!CheckCapacity(list))
	{
		printf("     
"); return; } for (i = list->size; i > 0; i--) { list->data[i] = list->data[i - 1]; } list->data[0] = x; list->size++; }

꼬리 꽂 이
void SeqListPushBack(SeqList* list, DATATYPE x)
{
	assert(list);
	if (!CheckCapacity(list))
	{
		printf("     
"); return; } list->data[list->size++] = x; }

삭제 하 다
void SeqListPopFront(SeqList* list)
{
	assert(list);
	size_t i;
	if (list->size == 0)
	{
		printf("   
"); return; } for (i = 0; i < list->size - 1; i++) { list->data[i] = list->data[i + 1]; } list->size--; }

꼬리 꽂 이
void SeqListPopBack(SeqList* list)
{
	assert(list);
	if (list->size == 0)
	{
		printf("   
"); return; } list->size--; }

순서 표 찾기
int SeqListFind(SeqList* list, DATATYPE x)
{
	assert(list);
	size_t i;
	for (i = 0; i < list->size; i++)
	{
		if (x == list->data[i])
		{
			printf("    
"); return i; } } printf("
"); return -1; }

Pos 위치 에 삽입
void SeqListInsert(SeqList* list, size_t pos, DATATYPE x)
{
	assert(list);
	int i = 0;
	if (!CheckCapacity(list))
	{
		printf("     
"); return; } for (i = (int)list->size; i > pos -1; i--) { list->data[i] = list->data[i - 1]; } list->data[pos - 1] = x; list->size++; }

Pos 위치 에서 삭제
void SeqListErase(SeqList* list, size_t pos)
{
	assert(list);
	size_t i;
	if (list->size == 0)
	{
		printf("   
"); return; } for (i = pos - 1; i < list->size - 1; i++) { list->data[i] = list->data[i + 1]; } list->size--; }

좋은 웹페이지 즐겨찾기