Archive for 八月, 2014

29
八月

資料結構程式 08/29: ex9.c

   Posted by: admin    in 103(暑)資料結構

Node* push(Node *stack, int indata)
{
     Node *newNode = malloc(sizeof(Node))//新節點(node) 
     newNode->data = indata;
     newNode->next = stack;
     return newNode;
}
Node* pop(Node *stack)
{
    Node *oldnode = stack;
    stack = stack->next;
    free(oldnode);
    return stack;
}
int main()
{
    Node *stack = NULL;
    int i;
    srand( (unsigned) time( NULL ) )//srand()是產生亂數的種子
    //在這個堆疊上push資料 
    for (i=1; i<5; i++)
 
        stack = push(stack, rand()%100);
        PrintList(stack);
    }
    //在這個堆疊上pop資料 
    for (i=1; i<5; i++)
 
        stack = pop(stack);
        PrintList(stack);
    }
}

bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark

Tags: , ,

27
八月

資料結構程式 08/27: ex8.c

   Posted by: admin    in 103(暑)資料結構

void FreeList(Node *listA)
{
    Node *curNode = listA;
    Node *nextNode;
    while ( curNode !=NULL)//從第一個節點把節點釋放 
    {
        nextNode = curNode->next;
        free(curNode);
        curNode = nextNode;
    }   
}
main()
{
   Node *prevNode;//->操作刪除時要記住前一個的指標
    Node *delNode;//->操作刪除的節點
 
  //在這個串列刪除節點
    if (listA!=NULL && listA->data >=30 && listA->data <=60)
       listA = listA->next;
    if (listA!=NULL)
    {
        prevNode = listA; curNode = listA->next;
        while (curNode!=NULL)
        {
              delNode = NULL; 
              if (curNode->data >=30 && curNode->data <=60)
              {
                  prevNode->next = curNode->next;
                  delNode = curNode; 
              }
              else
              {
                  prevNode = curNode;
              }
              curNode = curNode->next;
              if (delNode!=NULL)
                 free(delNode);
        }
    }
    PrintList(listA);
    FreeList(listA); // 釋放節點
}

bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark

Tags: , ,

25
八月

資料結構程式 08/25: ex7.c

   Posted by: admin    in 103(暑)資料結構

Node* NewNode()
{
    Node *newNode = malloc(sizeof(Node));//新節點(node) 
    newNode->data = rand()%100;
    newNode->next = NULL;
    return  newNode; 
}
void PrintList(Node *listA)
{
    Node *curNode = listA;
    printf("Print the nodes:");
    while ( curNode !=NULL)//從第一個節點把資料印出來
    {
        printf("%2d ",curNode->data);
        curNode = curNode->next;
    }   
    printf("\n");
}
int main(int argc, char *argv[])//主函數入口
{
    Node *listA = NULL;//->永遠指向第一個的指標 
    Node *curNode = NULL;//->操作(插入或刪除)第N個資料的指標 
    Node *newNode;//->操作(插入或刪除)第N個資料的指標 
    int i;
    srand( (unsigned) time( NULL ) );//srand()是產生亂數的種子
    listA = NewNode();
    PrintList(listA);
    //在這個串列附加上新的資料節點 
    curNode = listA;
    for (i=1; i<20; i++)
    {
        newNode = NewNode();
        if ( newNode->data < listA->data)
        {
             newNode->next = listA;
             listA = newNode;
        }
        else
        {
            curNode = listA;
            while (curNode->next!=NULL && curNode->next->data < newNode->data)
                  curNode = curNode->next;
            newNode->next = curNode->next;
            curNode->next = newNode;
        }
        PrintList(listA);
    }
    return 0; 
}

bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark

Tags: , ,

22
八月

資料結構程式 08/22: ex6.c

   Posted by: admin    in 103(暑)資料結構

#include <stdio.h> //標準輸出入函數的標頭檔
#include <stdlib.h>
typedef struct node//節點結構的自定型別定義 
{
    int data;//整數 
    struct node *next;//節點的指標 
} Node;
int main(int argc, char *argv[])//主函數入口
{
    Node *listA = NULL;
    Node *curNode = NULL;
    int i;
    srand( (unsigned) time( NULL ) );//srand()是產生亂數的種子
 
    listA = malloc(sizeof(Node));//啟始指標指向第一個節點(node) 
    curNode = listA;
    curNode->data = rand()%100;
    //在這個串列附加上新的資料節點 
    for (i=1; i<12; i++)
    {
        curNode->next = malloc(sizeof(Node));//產生新的節點 
        curNode = curNode->next;
        curNode->data = rand()%100;
    }
    curNode->next = NULL;
    //從第一個節點把資料印出來
    curNode = listA;
    while ( curNode !=NULL)
    {
        printf("%2d ",curNode->data);
        curNode = curNode->next;
    }
}

bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark

Tags: , ,

20
八月

資料結構程式 08/20: ex5.c

   Posted by: admin    in 103(暑)資料結構

#include <stdio.h> //標準輸出入函數的標頭檔
#include <stdlib.h>
int main(int argc, char *argv[])//主函數入口
{
    //由程式參數輸入N的值
    int i, N =  atoi(argv[1]);
    int *iData1 = malloc(sizeof(int)*N); 
    int *iData2 = malloc(sizeof(int)*N); 
    int cc;
 
    srand( (unsigned) time( NULL ) );//srand()是產生亂數的種子
    for (i = 0; i < N; i++)
         iData1[i] =iData2[i] = rand(); //rand()是產生亂數的函數 
 
    cc = BubbleSort(iData1, N);
    for (i = 0; i < N; i++)
         printf("%d\n", iData1[i]);
    printf("Bubble sort count = %d\n", cc);
 
    cc = QuickSort(iData2, 0, N-1);
    for (i = 0; i < N; i++)
         printf("%d\n", iData2[i]);
    printf("Quick sort count = %d\n", cc);
    return 0;
}
void Swap(int* data, int x, int y)
{
	int tt;
	tt= data[x];
	data[x] = data[y];
	data[y] = tt;
}
int QuickSort(int *data, int left, int right)
{
    int swapCount = 0;
    int pivot = data[left];
    int i=left+1, j=right;
    if(left < right){
        while (1)
        {
           //由左向右找小於Pivot的數值的位置
           while(i <right && data[i] < pivot)
	        	i++
           //由右向左找大於Pivot的數值的位置
           while(j >left && data[j] > pivot)
	        	j--
           if(i >= j)    
              break;   
           // 將比Pivot大的數值換到右邊,比Pivot小的數值換到左邊
           Swap(data, i, j); swapCount++;        
           i++; j--;    
        }
        Swap(data, left, j); swapCount++;    
        swapCount +=QuickSort(data, left  j-1);    // 對左子串列進行快速排序
        swapCount +=QuickSort(data, j+1  right);   // 對右子串列進行快速排序
    }
    return swapCount;
}
int BubbleSort(int *data, int length)
{
    int i,j;
    int swapCount = 0;
    for (i=length-1; i>0; i--)
    {
        for (j=1; j <=i; j++)
        {
            if (data[j-1]  data[j])
            {
                 Swap( data, j-1, j)
                 swapCount++
            }
        } 
    }
    return swapCount;
}

bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark

Tags: , ,