線性表的相關操作-初始化、增添、刪除
線性表的定義
線性表是具有相同資料型別的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;
相關文章
- Linux環境變數PATH的增添和刪除操作Linux變數
- 第二章-線性表-順序表(初始化、迴圈、插入、刪除、查詢、清空)
- ELK批量刪除索引及叢集相關操作記錄索引
- 線性表的基本操作
- 對線性表的操作
- 廣義表的相關操作
- iptables刪除命令中的相關問題
- 【Oracle】刪除大表操作一則Oracle
- 刪除 AP 發票相關指令碼指令碼
- Oracle表空間相關操作Oracle
- 【基底 / 線性組合 / 線性無關(相關)】- 圖解線性代數 02圖解
- 【原創】表空間相關操作
- ORA-02303無法使用型別或表的相關性來刪除或取代一個型別型別
- [BUG反饋]刪除模型屬性時 不會刪除模型表的field_sort模型
- sql 多表關聯刪除表資料SQL
- 是 直接把相關的檔案刪除就OK了
- 遠端連線Linux相關操作Linux
- 簡單介紹mysql如何刪除資料表和關聯的資料表刪除詳情MySql
- 【原創】通過資料字典操作刪除表的列
- [20171113]修改表結構刪除列相關問題.txt
- flowable的查詢操作和刪除操作
- Cookie的相關操作Cookie
- Word的相關操作
- 刪除表空間及所有指向關係
- Laravel 軟刪除操作Laravel
- Oracle - 表空間相關常用操作語句Oracle
- 臨時表空間temporary tablespace相關操作
- class屬性的新增刪除
- [求助][資料庫]表間約束的刪除完整性?資料庫
- 應用資料結構(一)線性表節點的插入和刪除演算法 (轉)資料結構演算法
- oracle 失誤刪掉資料檔案後,刪除表空間操作Oracle
- 資料結構中線性表的基本操作-合併兩個線性表-按照元素升序排列資料結構
- laravel 多對多關聯刪除中間表Laravel
- MySQL之資料庫和表的基本操作(建立表、刪除表、向表中新增欄位)MySql資料庫
- [20171113]修改表結構刪除列相關問題2.txt
- [20171113]修改表結構刪除列相關問題3.txt
- [20171113]修改表結構刪除列相關問題4.txt
- Java 新增、讀取、刪除Excel中的圖表趨勢線JavaExcel