第二章  陣列

53
第第第 第第 第第第第第第第第 第第第

Upload: vernon-stein

Post on 03-Jan-2016

33 views

Category:

Documents


0 download

DESCRIPTION

第二章  陣列. 資料結構與演算法. 徐熊健. 目錄. 2.1  陣列的宣告與使用 2.2  陣列的運算 2.3  陣列在記憶體中的位置. 陣列的抽象定義是一組具有相同資料型態 ( data type) 的元素,所組成的有序集合 ( ordered set), 通常儲存在一塊連續的記憶體上 。 陣列的應用技巧可開出善用陣列資料結構之門。 陣列在實體記憶空間中配置的關係可引領各位瞭解陣列資料結構如何存放在電腦中,以及程式語言、編譯器如何運作,方使陣列得以有效率地為吾人所用。. 2.1 陣列的宣告與使用. - PowerPoint PPT Presentation

TRANSCRIPT

  • 2.1

    2.2

    2.3

  • (data type) (ordered set)

  • 2.1 (1)(2)(3)

  • 2-1(assignment)1 main()2 { int list[5]; 3 int i; 4 for (i=0 ; i
  • 2-2

    1 #define size=5 2 main() 3 { int A[size],B[size],C[size]; 4 int i; 5for (i=0; i

  • 2.2

    2.2.1

    2.2.2

    2.2.3

    2.2.4

  • 2.2.12-3 1 void swap(int *x, int *y) 2 { int temp; 3 temp = *x; 4 *x = *y; 5 *y = temp; 6 } 7 void SelectionSort(int data[], int n) 8 { int i, j; 9 int min, temp;10 for (i=0; i
  • *x, *ydata[i], data[min] void swap(int *x, int *y)

    swap(&data[i], &data[min]);data[i], data[min]swap(a) data[]datannvoid SelectionSort(int data[],int n)

    SelectionSort(data, n);datanSelectionSort (b) n data n (global variable)

  • 6 984723 i=0 i=1 i=2 i=3 i=4 data[0] 9 2 2 2 2 2 2data[1] 8 8 3 3 3 3 3data[2] 4 4 4 4 4 4 4data[3] 7 7 7 7 7 7 7data[4] 2 9 9 9 9 8 8data[5] 3 3 8 8 8 9 9 x x

  • 2.2.2 (linear seach) O(n) (binary search) : x x

  • 2-1 Input: data[0], data[1], ..., data[n-1]Output: x () -1(x data)1for (i=0; i
  • 2-2 Input: data xOutput: x data x -1

    1lower=0; upper=n-1;2while (lower

  • int binary_search(int data[], int x){int lower=0, upper=n-1; while (lower
  • vs. x dataO(log n)O(log n)O(n) k O(nlogn+klogn)O(kn)

  • 2-4 1 int BinarySearch(int data[], int x, int left, int right) 2 { int middle; 3 if (left
  • 2.2.3 () A34CA int A[3][4]; A34A[i][j]Aaij

  • AB = ATA[i][j]B[j][i]A[j][i]B[i][j]

  • 2-3mn ABB=AT1AAA[i][j]=aij2for (i=0; i
  • 2-4 mnACC=A+B1 A,BA,B:A[i][j]=aijB[i][j]=bij2 for (i=0; i
  • 2-5 mnAnpBCC=ABA,BA,B A[i][j]=aij; B[i][j]=bij;2for (i=0; i
  • 2.2.4 n H.Coxeter1 3355

    816357492

    15812417161475232220136432119121092251811

  • 2-5 1#define MaxSize = 21;2int square[MaxSize][MaxSize];3void MagicSquare(int n)4{ int i, j, k, l, data;5if ((n>MaxSize)||(n
  • 13while (data
  • 13~19whiledatadata21n2O(n2)n2(n2)2-5(n2)

  • Magic Squares of n = 43434

    1234876517-517-617-717-817-417-317-217-1

    34-2434 -834 -834+24

  • Other square of n = 4A magic square on the Sagrada Famlia church faade in Barcelona

    71211421381116310596154

    11415412769811105132316

  • More Magic Squares

    Sol=111632334351711272883019141615232418202221171325291092612365334231

    Venus=17522471641103545234817421129306244918361213317254319373814321264420213983322745461540934328

  • More Magic Squareshttp://en.wikipedia.org/wiki/Magic_squarehttp://zh.wikipedia.org/zh-tw/%E5%B9%BB%E6%96%B9http://home.educities.edu.tw/listeve/Htm/magicsquare/magicsquare-1.htm

  • More Optionsvoid MagicSquare2(int n){ int i, j, k, l, data; int ** square = new int * [n];

    for (i=0; i

  • while (data Checked) { k = (i-1Checked) { k = (i+1==n) ? 0 : i+1; l = (j-10) i = (i-1 < 0) ? n-1 : i-1; else {i = k; j = l; } } else if (radioButton3->Checked) { k = (i-10) i = (i+1) % n; else {i = k;j = l; } } else if (radioButton4->Checked) { k = (i+1==n) ? 0 : i+1; l = (j+1==n) ? 0 : j+1; if (square[k][l]>0) i = (i-1 < 0) ? n-1 : i-1; else {i = k; j = l; } } square[i][j]=data++; }

  • print_square(square, n); for (i=0; i
  • String^ nsquare = Convert::ToString(n*n);String^ data_str = "";int len = nsquare->Length;int block_len = len+2;int blank_len = 0;int row_sum = 0;int col_sum = 0;richTextBox2->AppendText("--- Magic Square "+Convert::ToString(n)+"x"+Convert::ToString(n)+" ---\n");for (i=0; i
  • 2.3 2.3.1

    2.3.2

    2.3.3

  • 2.3.1 A l n A A[i] +il

    A[i] +il

  • C C A[i]=0 A+i=0 A A A+I A[i] CA int 24 sizeof(int) 24 float 4 sizeof(float) 4

  • 2.3.2 (row major) (column major) 01

  • u1u2

  • u1u2AA[i][j] A[i][j] +(iu2+j)l

  • 2.3.2 u1u2u3u1 2 10:u1-10:u2-10:u3-1A[0][0][0]~A[0][u2-1][u3-1] A[1][0][0]~A[1][u2-1][u3-1] A[u1-1][0][0]~A[u1-1][u2-1][u3-1] i0:i-1j0:j-1k0:k-1

  • A[i][j][k]A[i][j][k] iu2u3+ju3+k AA l A[i][j][k] +(iu2u3+ju3+k)l

  • A[i1][i2][in] nA[i1][i2][in]: i1 u2 u3 un+ i2 u3 u4 un + i3 u4 u5 un...+ in-1 un + in =

  • wj=u1, u2, , unn-2 w1, w2, , wn-1 (wn=1)A[i1][i2][in]n n+1(random access)

  • Dynamic Allocation of Arrays in Cint * data;n = ...data = new int (n);// data = (int *)malloc(n*sizeof(int));// listBox1->Items->Add((int)data);for (i=0; i
  • Dynamic Allocation of 2D Arrays in Cint ** data2;n = ...; m = ...;data2 = new int * [n];//data2 = (int **) malloc(n*sizeof (void *));//listBox3->Items->Add((int)data2);for (i=0; i
  • nmint *data2data2[0]data2[1]data2[i]data2[i][j]

  • Advanced Dynamic Allocation In = ...; m = ...;int **ia = (int **) malloc(n * sizeof(int *));int *iax = (int *) malloc(n*m*sizeof(int)); for(i = 0; i < n; i++, iax += m){ia[i] = iax;}for (i = 0; i < n; i++) {for (j = 0; j < m; j++){ia[i][j] = i*10 +j;}}free(ia[0]);free(ia);nn*miaiax+miaxia[0]ia[i]ia[1]

  • Advanced Dynamic Allocation II//n = int::Parse(textBox1->Text);//m = int::Parse(textBox2->Text);int **ia =(int **) malloc(n*sizeof(void*)+n*m*sizeof(int *));int *iax = (int*)(ia + n);for (i = 0; i < n; i++, iax += m){ia[i] = iax;}for (i = 0; i < n; i++) { for (j = 0; j < m; j++){ia[i][j] = i*10 + j;}}free(ia);