線性表的相關操作-初始化、增添、刪除
線性表的定義
線性表是具有相同資料型別的n個元素的有限序列,n是表長(每個元素佔的空間是一樣的)
ai是線性表中的“第i個”元素線性表中的位序(位序從1開始,陣列下標從0開始)
線性表的初始化和簡單遍歷
#include <stdio.h>
#include "stdlib.h"
#define maxsize 10
typedef struct {
int data[maxsize];//用靜態的陣列存放資料元素
int length;//線性表當前長度
}SqList;
//初始化順序表
void Initilist(SqList &L){//此處引用需要在C++環境進行,C語言環境編譯不出來,&L對引數的修改結果帶過來
int i;
for(i=0;i<maxsize;i++)
L.data[i]=0;//將所有資料元素預設為初始值
L.length=0;//順序表的初始長度為0
}
int main() {
SqList L;//宣告一個順序表
Initilist(L);//初始化順序表
for(int i=0;i<maxsize;i++){
printf("%d ",L.data[i]);
}
}
這是通過靜態分配去實現線性表的初始化
要值得注意的是,若一開始沒有講相應的資料預設初始化為0,將會出現“髒資料”的情況
通過動態分配實現
因為靜態分配的方法不能改變陣列的長度,而且如果靜態分配的空間太小,容易造成資料溢位,但是如果分配空間太大容易造成空間的浪費。因此這裡我們需要考慮動態分配記憶體的方式
動態分配實現的基本套路
L.data=(ElemType *)malloc(sizeof(Elemtype) *InitiSize)
//ElemType 指的是資料型別 InitSize初始化的長度大小
#include<stdio.h>
#include "stdlib.h"
#define InitSize 10
typedef struct {
int *data;//動態分配陣列的指標
int maxsize;//順序表最大容量
int length;//當前長度
}Sqlist;
void IniLIst(Sqlist &L){
L.data=(int *)malloc(sizeof(int )*InitSize);
//動態分配空間
L.length=0;
L.maxsize=InitSize;
}
//增加長度
void Increase(Sqlist *L,int len){
int *p=L->data;
L->data=(int *)malloc(sizeof(int)*(len+L->maxsize));
for(int i=0;i<L->length;i++){
L->data[i]=p[i];//將資料複製到新區域
}
L->length=L->maxsize+len;//順序表最大長度增加N
free(p);
}
插入操作
bool ListInsert(Sqlist &L,int i,int e){
if(i<1||i>L.length+1)//判斷i的範圍是否有效
return false
if(L.length>=MaxSize)//當前儲存空間已滿,不能插入
return false
for(int j=L.length;j>=i;i--)//將第i個元素往後移
L.data[j]=L.data[j-1];
L.data[i-1]=e;//位置i是指位序,對應陣列下標要減1
L.length+=1;
return True;
}
插入的時間複雜度為O(N)
刪除操作
bool delete(Sqlist &L,int i,int &e)
if(i<1||i>L.length)
return false;
e=L.data[i-1];//將被刪除元素賦值給e
for(int j=i;j<L.length;j++)//從前面的元素依次移動
L.data[j-1]=L.data[j];//元素前移
L.length--;
return true;
相關文章
- 第二章-線性表-順序表(初始化、迴圈、插入、刪除、查詢、清空)
- ELK批量刪除索引及叢集相關操作記錄索引
- 線性表的基本操作
- iptables刪除命令中的相關問題
- ORA-02303無法使用型別或表的相關性來刪除或取代一個型別型別
- 刪除 AP 發票相關指令碼指令碼
- 線性代數相關
- 5、刪除被其它表關聯的主表
- [BUG反饋]刪除模型屬性時 不會刪除模型表的field_sort模型
- sql 多表關聯刪除表資料SQL
- 遠端連線Linux相關操作Linux
- 簡單介紹mysql如何刪除資料表和關聯的資料表刪除詳情MySql
- flowable的查詢操作和刪除操作
- Laravel 軟刪除操作Laravel
- 修改刪除表
- Word的相關操作
- Cookie的相關操作Cookie
- class屬性的新增刪除
- 主鍵的建立、新增、刪除操作
- laravel 多對多關聯刪除中間表Laravel
- mySql刪除多個表 刪除多個欄位的SQLMySql
- Linux相關的操作指令Linux
- 時間相關的操作
- Java 新增、讀取、刪除Excel中的圖表趨勢線JavaExcel
- vue+element-ui操作刪除(單行和批量刪除)VueUI
- Python連線es筆記四之建立和刪除操作Python筆記
- MongoDB相關操作MongoDB
- JavaScript 刪除class屬性JavaScript
- C++ 順序容器的刪除操作C++
- Oracle快速找回被刪除的表Oracle
- 殺會話之查詢鎖表的物件及相關操作會話物件
- Tablespace表空間刪除
- MySQL刪除資料表MySql
- python的字典及相關操作Python
- 如何快速刪除Word中的頁首橫線?刪除頁首橫線技巧分享
- C語言實現帶表頭結點單連結串列的初始化、查詢、插入、刪除、輸出、撤銷等操作C語言
- Oracle表 列欄位的增加、刪除、修改以及重新命名操作sqlOracleSQL
- oracle級聯刪除使用者,刪除表空間Oracle