데이터 구조 가 엄격 하고 민감 하 다 - 선형 표 의 순서 저장
6396 단어 데이터 구조
사실은 배열 로 요소 의 저장 과 일련의 조작 을 하 는 것 이다.
그것 의 저장 구 조 는 다음 과 같다.
#define LIST_INIT_SIZE 100
typedef struct Arry
{
int* Addr; //
int size; // ,
int capacity; //
}Arry;
, ( 、 )、 ( , )、 , 。
Arry.h
#ifndef ARRY_H_INCLUDED
#define ARRY_H_INCLUDED
#include
#include
#include
#define LIST_INIT_SIZE 100
typedef struct Arry
{
int* Addr; //
int size; //
int capacity; //
}Arry;
Arry *Init_Arry() //
{
Arry * myarry = (Arry *)malloc(sizeof(Arry));
myarry ->size = 0;
myarry ->capacity = LIST_INIT_SIZE;
myarry ->Addr = (int*)malloc(sizeof(int) * myarry -> capacity);
return myarry;
}
void Destory_Arry(Arry *arr)
{
if(arr == NULL)
{
return ;
}
arr ->size = 0;
}
void Push_Arry(Arry *arr,int value)//
{
if(arr -> size == arr ->capacity)
{
int *newspace = (int *)malloc(arr -> capacity * 3 *sizeof(int)); //
memcpy(newspace,arr -> Addr,arr -> capacity * sizeof(int)); //
free(arr->Addr); //
if(!newspace) //
exit(-1);
arr->capacity = arr->capacity *3; //
arr->Addr = newspace; //
}
arr ->Addr[arr->size] = value; //
arr ->size++;
}
void Push_OrderArry(Arry *arr, int value) //
{
if(arr -> size == arr -> capacity)
{
int *newspace = (int *)malloc(arr -> capacity *2*sizeof(int));
memcpy(newspace,arr -> Addr , arr -> capacity * sizeof(int));
free(arr -> Addr);
if( !newspace)
exit(-1);
arr -> Addr = newspace;
arr -> capacity = arr -> capacity * 2;
}
int i;
for( i = arr -> size; value < arr -> Addr[i - 1]; i--)
{
arr -> Addr[i] = arr -> Addr[i - 1];
}
arr -> Addr[i] = value;
arr -> size++;
}
void RemoveByPos(Arry *arr,int pos) //
{
if(arr == NULL)
{
printf(" , !");
return;
}
if( pos < 0 || pos >= arr -> size)
{
printf(" , !");
return;
}
int i;
for(i = pos; i < arr -> size; i++)
{
arr -> Addr[i] = arr -> Addr[i+1];
}
arr ->size--;
}
void RemoveByValue(Arry *arr,int value)//
{
if(arr == NULL)
{
printf(" , !");
return;
}
int i = 0,j = 0;
while(arr -> Addr[i] != value)
{
i++;
if( i == arr ->size)
{
printf(" , :");
return;
}
}
for(j = i - 1; j < arr -> size; j++)
{
arr -> Addr[j] = arr -> Addr[j+1];
}
arr ->size--;
}
int Find_Arry(Arry *arr,int value) //
{
if(arr == NULL)
{
printf(" , !");
return -1;
}
int i = 0;
while(arr ->Addr[i++] != value)
if( i == arr ->size)
{
printf(" !");
return -1;
}
printf(" %d !",i);
return i;
}
void Print_Arry(Arry *arr) //
{
int i;
if(arr == NULL)
{
printf(" !");
return;
}
for(i = 0; i < arr -> size; i++)
{
printf("%d ",arr->Addr[i]);
}
printf("
");
}
void Free_Arry(Arry *arr) //
{
if(arr == NULL)
return;
if(arr ->Addr != NULL)
{
free(arr -> Addr);
}
free(arr);
}
void Reverse_Arry(Arry *arr)
{
if(arr == NULL)
{
printf(" !
");
return;
}
int i,temp;
for(i = 0; i < arr->size/2; i++)
{
temp = arr->Addr[i];
arr->Addr[i] = arr->Addr[arr->size - i - 1];
arr->Addr[arr->size - i - 1] = temp;
}
printf(" !
");
}
#endif // ARRY_H_INCLUDED
main.c
#include
#include
#include
#include "Arry.h"
void testReverse() //
{
int i;
Arry * myarry = Init_Arry(); //
for( i= 1; i <= 5;i++ ) //
{
Push_Arry(myarry,i);
}
Print_Arry(myarry); //
Reverse_Arry(myarry);
Print_Arry(myarry);
}
void test() //
{
int i;
Arry * myarry = Init_Arry(); //
Arry * myarry1 = Init_Arry();
for( i= 0; i < 5;i++ ) //
{
Push_Arry(myarry,i);
}
for( ; i < 10; i++ )
{
Push_Arry(myarry1,i);
}
Print_Arry(myarry); //
Print_Arry(myarry1);
printf(" ;%d
",myarry ->capacity);
printf(" :%d
",myarry ->size);
//Find_Arry(myarry,5);
//Push_OrderArry(myarry,0);
//Print_Arry(myarry);
/*Push_Arry(myarry,10);
Print_Arry(myarry);
printf("
");
printf(" ;%d
",myarry ->capacity);
printf(" :%d
",myarry ->size);
RemoveByPos(myarry,10);
printf(" :");
Print_Arry(myarry);
RemoveByValue(myarry,5);
printf(" :");
Print_Arry(myarry);
printf(" :");
Free_Arry(myarry);
Print_Arry(myarry);*/
}
int main()
{
//testReverse();
//test();
system("pause");
return 0;
}
: , 。
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.