c資料結構的順序儲存的實現

來源:互聯網
上載者:User

標籤:c   資料結構   順序表   儲存   

本文為原創,轉載請註明出處:http://blog.csdn.net/j903829182/article/details/38173819


#include<stdio.h>#define MaxSize 100        //定義元素的大小typedef int DataType;        //定義一個類型typedef struct{     //定義一個結構體  DataType list[MaxSize];  int size;             //結構體元素的大小}SeqList;                 //結構體的對象//初始化void initiate(SeqList *L){      L->size=0;//定義初始化元素個數}//求當前元素的個數int getLength(SeqList L){return L.size;//返回長度}//插入資料元素int insertData(SeqList *L,int i,DataType x){//在順序表L的第i(0<=i<=size)個位置前插入資料元素x//插入成功返回1,出人失敗返回0   int j;   if(L->size>=MaxSize){      printf("順序表已滿,無法插入!!\n");  return 0;   }else if(i<0||i>L->size){      printf("插入的位置不合法,不在指定的範圍,參數i不合法!\n");  return 0;   }else{      //從後向前一致移動資料,為插入做準備   for(j=L->size;j>i;j--){         L->list[j]=L->list[j-1];   }       L->list[i]=x;   L->size++;   return 1;   }}//刪除資料int deleteData(SeqList *L,int i,DataType *x){     //刪除順序表中位置為i的資料i>=0&&i<=size-1,把資料儲存到x中//刪除成功返回1,否則返回0int j;if(L->size<=0){    printf("順序表已空無資料元素可刪!\n");return 0;}else if(i<0||i>L->size-1){    printf("參數i不合法,不能刪除!\n");return 0;}else{*x=L->list[i];for(j=i+1;j<=L->size-1;j++){//從前往後一次前移     L->list[j-1]=L->list[j];}L->size--;//資料元素減一return 1;}}//取出資料元素int getData(SeqList L,int i,DataType *x){    if(i<0||i>L.size-1){printf("參數i不合法,不能刪除!\n");return 0;}else{    *x=L.list[i];return 1;}}int main(){    SeqList myList;int i,x;     initiate(&myList); for(i=0;i<10;i++){     insertData(&myList,i,i+1); } deleteData(&myList,4,&x); for(i=0;i<getLength(myList);i++){    getData(myList,i,&x);printf("%d  ",x); }return 0;}







#include<stdio.h>/**線性結構的定義:除第一個和最後一個元素外,每個元素只有一個唯一的前驅資料元素和唯一的後繼資料元素個樹型結構的定義:除根節點外,每個元素只有一個唯一的前驅資料元素可有零個或若干個後繼資料元素圖型結構:每個元素可有零個或若干個前驅資料元素和零個或若干個後繼資料元素線性表:是一種最簡單的線性結構,線性表的主要特點是可以在任意的位置插入和刪除一個資料元素線性表可以用順序儲存和鏈式儲存結構儲存*///線性表的順序儲存的表示#define MaxSize 100#define true 1#define false 0typedef int DataType;typedef struct{DataType list[MaxSize];int size;}SeqList;//初始化void ListInitiate(SeqList *L){  L->size=0;//設定初始元素的個數為0}//求當前資料元素個數int  GetListLength(SeqList L){   return L.size;//返回元素的個數}//插入資料元素int ListInsert(SeqList *L,int i,DataType data){int j;//定義變數jif(L->size>=MaxSize){    printf("順序表已滿,無法插入!!\n");return false;//返回}if(i<0||i>L->size+1){   printf("輸入的參數不合法,不能進行插入!!\n");   return false;//返回}else{    for(j=L->size;j>=i;j--){      L->list[j]=L->list[j-1];//移動元素}    L->list[i-1]=data;//賦值L->size++;//元素個數加一return true;}}//刪除資料元素int DeleteList(SeqList *L,int i,DataType *data){int j=0;    if(L->size==0){printf("線性表為空白,不能執行刪除操作!!\n");return false;}if(i<0||i>L->size){printf("刪除的位置i不對,不能夠進行刪除!!\n");return false;}else{*data=L->list[i-1];for(j=i;j<L->size;j++){    L->list[j-1]=L->list[j];}L->size--;return true;}}//取資料元素int ListGet(SeqList *L,int i,DataType *data){if(i<0||i>L->size){printf("取的位置不正確,不能進行取值操作!!\n");return false;}else{*data=L->list[i-1];    return true;}}//判斷是否為空白的操作int  Empty(SeqList L){if(L.size==0){   return true;}else{   return false;}}//列印所有輸出的函數void displayData(SeqList L){int i;for(i=0;i<L.size;i++){    printf("%d ",L.list[i]);}}/*anthor 獨孤九劍  time 2014/4/7*///主函數int main(){int i;int data;SeqList L;    ListInitiate(&L);for(i=1;i<10;i++){   ListInsert(&L,i,i);}//displayData(L); //ListInsert(&L,5,45);displayData(L);printf("\n");DeleteList(&L,5,&data);printf("\n");displayData(L);printf("\n");printf("%d %d\n",sizeof(SeqList),L.size);return 0;}//順序表的主要優點是:演算法簡單,內容單元利用率較高://主要缺點是:需要預先確定資料元素的最大個數






相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.