ADT Array is
objects :
A set of pairs <index, value> where for each value of index there is a value from the set item.
index is a finite ordered set of one or more dimensions
functions:
for all A Array, i index, x item, j, size integer
Array Create(j,list) ::= return… // j 는 array의 size
item Retrieve(A,i) ::= if () return … else return … // 검색
Array Store(A,i,x) ::= if () return … else return … // 저장
end Array
Data structure for one dimensional Array

int 는 보통 4바이트임, 그래서 list+2는 사실 list + 2*sizeof(int) , 8임!
#define MAX_SIZE 100
float sum(float [], int);
float input[MAX_SIZE], answer;
int i;
void main(void)
{
for (i = 0; i < MAX_SIZE; i++)
input[i] = i;
answer = sum(input, MAX_SIZE);
printf("The sum is: %f\n", answer);
}
float sum(float list[], int n) // *list 도 가능
{
int i;
float tempsum = 0;
for (i = 0; i < n; i++)
tempsum += list[i];
return tempsum;
}
int x[3][4]
첫 번째가 세로, 두 번째가 가로
array 속 array
첫 번째 array는 실제 int 값을 가지고 있는게 아니라 int 값을 가지고 있는 1d array들의 첫 번째 주소를 가지고 있는 array로 구성되어있음

#include <math.h>
#include <stdio.h>
#define MAX_SIZE 101
main()
{
int i, n, list[MAX_SIZE];
printf(“Enter the number of number to generate: ”);
scanf(“%d”, &n”); // n이 MAX_SIZE를 넘게되면 segmentation falut가 남
for (i=0;i<n;i++){
list[i]=rand()%1000;
printf (“%d\n”, list[i]);
}
}
int i, n, *list;
printf(“Enter the number of number to generate: ”);
scanf(“%d”, &n);
if (n < 1) {
fprintf(stderr, “Improper value of n \n”);
exit (EXIT_FAILURE);
}
list=malloc(n * sizeof(int));
if (list==NULL) {
fprintf(stderr, “lack of memory\n”);
exit (EXIT_FAILURE);
}
int** make2dArray(int rows, int cols)
{
/* create a two dimensional rows cols array */
int** x, i;
/* get memory for row pointers */
MALLOC(x, rows * sizeof(*x));
/* get memory for each row */
for (i = 0; i < rows; i++)
MALLOC(x[i], cols * sizeof(**x);
return x;
}
void main()
{
int** myArray;
myArray=make2dArray(5,10);
myArray[2][4]=6;
}

정답은,, 안대영,,
힌트
pi:
┌───┬───┬───┬───┬───┐
│ * │ * │ * │ * │ * │ ← 각 포인터는 각기 다른 행을 가리킴
└───┴───┴───┴───┴───┘
pi[0]: [int, int, int] (3개)
pi[1]: [int, int, int, int, int] (5개)
pi[2]: [int, int] (2개)
pi[3]: [int, int, int, int] (4개)
pi[4]: [int, int, int, int, int, int] (6개)
struct {
char name[10];
int age;
float salary;
} person;
strcpy(person.name, “korykang”);
person.age=34;
person.salary=35000;
typedef struct humanBeing {
char name[10];
int age;
float salary;
};
typedef struct {
char name[10];
int age;
float salary;
} humanBeing;
둘이 동일함
if (person1 == person2) {}
=> 가능?
얘네 둘이가 같으려면 둘이 같은 object를 포인팅, 즉 가리키고 있어야함
단순히 value만 같아서는 안됨
typedef struct {
int month;
int day;
int year;
} date;
typedef struct humanBeing{
char name[10];
int age;
float salary;
date dob;
} humanBeing;
person1.dob.month=12; person1.dob.day=3;
person1.dob.year=1969;
하나의 스트럭쳐가 다른 스트럭쳐 안에 임베딩, 즉 속할 수 있음
구조체 안 구조체가 멤버로 가능하다는 뜻
정답은,, 시크릿,,다항식
exponent, 지수 기준으로 ordered list 만들기

/* d = a + b, where a, b, and d are polynomials */
d = Zero();
while (! IsZero(a) && ! IsZero(b)) do {
switch COMPARE(LeadExp(a), LeadExp(b)) {
case -1: /* if LeadExp(a) < LeadExp(b) */
d = Attach (d, Coef(b, LeadExp(b)), LeadExp(b));
b = Remove(b, LeadExp(b));
break;
case 0: /* if LeadExp(a) == LeadExp(b) */
sum = Coef(a, LeadExp(a)) + Coef(b, LeadExp(b));
if (sum) {
d = Attach(d, sum, LeadExp(a));
a = Remove(a, LeadExp(a));
b = Remove(b, LeadExp(b));
}
break;
case 1: /* if LeadExp(a) > LeadExp(b) */
d = Attach(d, Coef(a, LeadExp(a)), LeadExp(a));
a = Remove(a, LeadExp(a));
}
}
#define MAX_DEGREE 101
typedef struct {
int degree;
float coef[MAX_DEGREE];
} polynomial;
n < MAX_DEGREE
`a.degree = n, a.coef[i] = An-1`

#define MAX_TERMS 100
typedef struct {
float coef;
int expon;
} polynomial;
polynomial terms[MAX_TERMS];
int starta, finisha, startb, finishb, avail;
starta=0; finisha=1; startb=2; finishb=5; avail=6;

정답은 안돼~
그런데 이 문제 좀 어렵당,,