线性表的定义与操作-顺序表,链式表(C语言)
生活随笔
收集整理的這篇文章主要介紹了
线性表的定义与操作-顺序表,链式表(C语言)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
順序表:
typedef int Position; typedef struct LNode *List; struct LNode {ElementType Data[MAXSIZE];Position Last; };/* 初始化 */ List MakeEmpty() {List L;L = (List)malloc(sizeof(struct LNode));L->Last = -1;return L; }/* 查找 */ #define ERROR -1Position Find( List L, ElementType X ) {Position i = 0;while( i <= L->Last && L->Data[i]!= X )i++;if ( i > L->Last ) return ERROR; /* 如果沒找到,返回錯誤信息 */else return i; /* 找到后返回的是存儲位置 */ }/* 插入 */ /*注意:在插入位置參數P上與課程視頻有所不同,課程視頻中i是序列位序(從1開始),這里P是存儲下標位置(從0開始),兩者差1*/ bool Insert( List L, ElementType X, Position P ) { /* 在L的指定位置P前插入一個新元素X */Position i;if ( L->Last == MAXSIZE-1) {/* 表空間已滿,不能插入 */printf("表滿"); return false; } if ( P<0 || P>L->Last+1 ) { /* 檢查插入位置的合法性 */printf("位置不合法");return false; } for( i=L->Last; i>=P; i-- )L->Data[i+1] = L->Data[i]; /* 將位置P及以后的元素順序向后移動 */L->Data[P] = X; /* 新元素插入 */L->Last++; /* Last仍指向最后元素 */return true; } /* 刪除 */ /*注意:在刪除位置參數P上與課程視頻有所不同,課程視頻中i是序列位序(從1開始),這里P是存儲下標位置(從0開始),兩者差1*/ bool Delete( List L, Position P ) { /* 從L中刪除指定位置P的元素 */Position i;if( P<0 || P>L->Last ) { /* 檢查空表及刪除位置的合法性 */printf("位置%d不存在元素", P ); return false; }for( i=P+1; i<=L->Last; i++ )L->Data[i-1] = L->Data[i]; /* 將位置P+1及以后的元素順序向前移動 */L->Last--; /* Last仍指向最后元素 */return true; }鏈式表:
typedef struct LNode *PtrToLNode; struct LNode {ElementType Data;PtrToLNode Next; }; typedef PtrToLNode Position; typedef PtrToLNode List;/* 查找 */ #define ERROR NULLPosition Find( List L, ElementType X ) {Position p = L; /* p指向L的第1個結點 */while ( p && p->Data!=X )p = p->Next;/* 下列語句可以用 return p; 替換 */if ( p )return p;elsereturn ERROR; }/* 帶頭結點的插入 */ /*注意:在插入位置參數P上與課程視頻有所不同,課程視頻中i是序列位序(從1開始),這里P是鏈表結點指針,在P之前插入新結點 */ bool Insert( List L, ElementType X, Position P ) { /* 這里默認L有頭結點 */Position tmp, pre;/* 查找P的前一個結點 */ for ( pre=L; pre&&pre->Next!=P; pre=pre->Next ) ; if ( pre==NULL ) { /* P所指的結點不在L中 */printf("插入位置參數錯誤\n");return false;}else { /* 找到了P的前一個結點pre *//* 在P前插入新結點 */tmp = (Position)malloc(sizeof(struct LNode)); /* 申請、填裝結點 */tmp->Data = X; tmp->Next = P;pre->Next = tmp;return true;} }/* 帶頭結點的刪除 */ /*注意:在刪除位置參數P上與課程視頻有所不同,課程視頻中i是序列位序(從1開始),這里P是擬刪除結點指針 */ bool Delete( List L, Position P ) { /* 這里默認L有頭結點 */Position pre;/* 查找P的前一個結點 */ for ( pre=L; pre&&pre->Next!=P; pre=pre->Next ) ; if ( pre==NULL || P==NULL) { /* P所指的結點不在L中 */printf("刪除位置參數錯誤\n");return false;}else { /* 找到了P的前一個結點pre *//* 將P位置的結點刪除 */pre->Next = P->Next;free(P);return true;} } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的线性表的定义与操作-顺序表,链式表(C语言)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++实现数组模拟链表(实现链表的增删功
- 下一篇: 现在腾讯又打算搞个大事腾讯搞事情