程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 用數組實現線性表各種操作(C語言)完結

用數組實現線性表各種操作(C語言)完結

編輯:關於C語言

 

排序使用簡單的插入排序實現:

C代碼 

void one_sort(int *sqList,int val,int len) 

     int pos=len; 

     int temp=val; 

     while(val<sqList[pos-1]&&pos>0) 

     { 

        sqList[pos]=sqList[pos-1]; 

        pos--; 

         

     }  

     sqList[pos]=temp; 

      

//直接插入排序實現 

void straisort(struct Arr * pArr) 

      

     for(int i=1;i<pArr->cnt;i++) 

     { 

        one_sort(pArr->pBase,pArr->pBase[i],i);//調用單步排序 

     } 

}  

 

直接插入排序通用算法:

C代碼 

void one_sort(int *sqList,int val,int len) 

     int pos=len; 

     int temp=val; 

     while(val<sqList[pos-1]&&pos>0) 

     { 

        sqList[pos]=sqList[pos-1]; 

        pos--; 

         

     }  

     sqList[pos]=temp; 

      

//直接插入排序實現 

void straisort(int *arr,int len) 

     int i; 

     for(i=1;i<len;i++) 

     { 

        one_sort(arr,arr[i],i);//調用直接插入排序 

     } 

}  

 

 

 線性表的操作數組實現代碼如下,當然功能並不全面,等待以後收集

 

C代碼 

/*

線性結構數組的實現

*/ 

#include <stdio.h> 

#include <malloc.h>  //包含了malloc函數 

#include <stdlib.h>  //包含了exit函數  

 

//首先定義描述數組信息的結構體類型 

struct Arr 

  int * pBase;//存放數組首地址的指針變量 

  int len;//數組長度 

  int cnt;//數組中元素的個數 

}; 

 

//定義數組的基本操作的函數聲明 

void init_arr(struct Arr * pArr,int length);//數組初始化 

bool append_arr(struct Arr * pArr,int val);//追加元素 

bool insert_arr(struct Arr * pArr,int index ,int val);//插入元素 

bool delete_arr(struct Arr * pArr, int pos, int * pVal);//刪除元素 

int get(struct Arr *pArr,int index); //得到元素 

bool is_empty(struct Arr * pArr);//判斷是否為空 

bool is_full(struct Arr * pArr);//判斷是否已滿 

void show_arr(struct Arr * pArr);//遍歷數組 

void inversion_arr(struct Arr * pArr);//數組倒置 

void one_sort(int *sqList,int val,int len);//單步排序聲明 

void straisort(struct Arr * pArr);//直接插入排序聲明 

 

int main(void) 

    struct Arr arr; 

    init_arr(&arr,6);//初始化函數測試 

    //show_arr(&arr); 

    append_arr(&arr,3); 

    append_arr(&arr,2); 

    append_arr(&arr,9); 

    insert_arr(&arr,2,7); 

    show_arr(&arr); 

    return 0; 

 

//初始化數組的函數實現  pArr是結構體變量arr的指針 

void init_arr(struct Arr * pArr,int length) 

   pArr->pBase=(int *)malloc(sizeof(int)*length);//malloc()函數頭文件聲明 

   if(NULL==pArr->pBase) 

   { 

      printf("動態內存分配失敗!\n"); 

      exit(-1);//要在頭文件聲明 

   } 

   else 

   { 

     pArr->len=length; 

     pArr->cnt=0; 

   } 

 

//遍歷數組函數實現 

void show_arr(struct Arr * pArr) 

    if(is_empty(pArr)) 

    { 

       printf("數組為空\n"); 

    } 

    else 

    { 

      for(int i=0;i<pArr->cnt;i++) 

      { 

        printf("%d",pArr->pBase[i]); 

      } 

    } 

    

//判斷數組是否為空 

bool is_empty(struct Arr * pArr) 

   if(pArr->cnt==0) 

    

       return true; 

   else 

    

       return false; 

    

//數組追加元素 

bool append_arr(struct Arr * pArr,int val) 

  if(pArr->cnt < pArr->len) 

  { 

    pArr->pBase[pArr->cnt]=val; 

    (pArr->cnt)++; 

    return true; 

  } 

  else 

     printf("數組已滿\n"); 

    return false; 

//插入元素 

bool insert_arr(struct Arr * pArr,int index ,int val) 

   if(pArr->cnt<pArr->len&&index<=pArr->cnt) 

   { 

       for(int i=pArr->cnt-1;i>=index-1;i--) 

       { 

         pArr->pBase[i+1]=pArr->pBase[i]; 

          

          

       } 

       pArr->pBase[index-1]=val; 

       (pArr->cnt)++; 

       return true; 

   } 

   else 

   { 

       printf("插入失敗\n"); 

       return false; 

   } 

 

 

//單步直接插入排序實現 

 

void one_sort(int *sqList,int val,int len) 

     int pos=len; 

     int temp=val; 

     while(val<sqList[pos-1]&&pos>0) 

     { 

        sqList[pos]=sqList[pos-1]; 

        pos--; 

         

     }  

     sqList[pos]=temp; 

      

//直接插入排序實現 

void straisort(struct Arr * pArr) 

      

     for(int i=1;i<pArr->cnt;i++) 

     { 

        one_sort(pArr->pBase,pArr->pBase[i],i);//調用單步排序 

     } 

}  

//數組倒置 

void inversion_arr(struct Arr * pArr ) 

  int i = 0; 

    int j = pArr->cnt-1;//首尾下標的呼應關系 

    int t; 

 

    while (i < j) 

    { 

        t = pArr->pBase[i]; 

        pArr->pBase[i] = pArr->pBase[j]; 

        pArr->pBase[j] = t; 

        i++; 

        j--; 

    } 

    return; 

//刪除元素 

bool delete_arr(struct Arr * pArr, int pos, int * pVal) 

    int i; 

 

    if ( is_empty(pArr) ) 

        return false; 

    if (pos<1 || pos>pArr->cnt) 

        return false; 

 

    *pVal = pArr->pBase[pos-1]; 

    for (i=pos; i<pArr->cnt; i++) 

    { 

        pArr->pBase[i-1] = pArr->pBase[i]; 

    } 

    pArr->cnt--; 

    return true; 

//判斷是否已滿 

bool is_full(struct Arr * pArr) 

    if (pArr->cnt == pArr->len) 

        return true; 

    else 

        return false; 

 

//查找元素 

int get(struct Arr *pArr,int index) 

   for(int i=0;i<pArr->cnt;i++) 

   { 

     if(index==i) 

     { 

       return pArr->pBase[i]; 

     } 

   } 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved