標籤: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;}//順序表的主要優點是:演算法簡單,內容單元利用率較高://主要缺點是:需要預先確定資料元素的最大個數