順序表的建立插入與刪除
坑爹的資料結構課,在加上坑爹的資料結構老師,將來的資料結構之路想必不會順暢吧
好吧,閒話不多說。這該死的資料結構課上都沒怎麼聽,哎我以為我「苦學」一寒假的鍊錶,最開始的資料結構應該無壓力吧,***沒想到第二週的作業就讓我懵逼了。
我再一看老師給出的部分原始碼,要自己補充完整的。心裡有事一萬匹草泥馬奔過。這些的什麼啊!拜託變數宣告寫出來好嗎,**格式還能不能再亂一點。好吧經過我的刻苦攻關,**寫完了:
可以單獨編寫全部**完成,也可以在如下**裡補充相應**完成該實驗任務。
*/#include #include #define list_init_size 10 //線性表儲存空間的初始分配量
#define listincrement 5 //線性表儲存空間的分配增量
#define true 1
#define ok 1
#define false 0
#define error 0
#define infeasible -1
#define overflow -2
//請編碼完成常量名及自定義資料型別的定義
typedef int status;
typedef int elemtype;
typedef structsqlist;
void initlist(sqlist &l)
l.length=0;//長度初始化為零
l.listsize=list_init_size;//初始化儲存容量
//請編碼完成順序表l的初始化
}status listinsert(sqlist &l,int i,elemtype e)//i為插入的位置,e為其值
l.elem=newbase;
l.listsize+=listincrement;//擴大容量宣告
}elemtype *p,*q;
q=&l.elem[i-1];//下標減一
for(p=&(l.elem[l.length-1]);p>=q;--p)
//將i位置後的所有元素往後移一位
*q=e;
++l.length;
return ok;
}status listdelete(sqlist &l,int i,elemtype &e)
elemtype *p,*q;
p=&l.elem[i-1];
e=*p;//取得要刪除的元素的位址
q=&l.elem[l.length-1];//取得最後乙個元素、
while(p=10;i--)
printf("list.length=%d list.listsize=%d\n",list.length,list.listsize);
return 0;
} 一開始我還以為順序表就是鍊錶,後來才發現不是,比煉表要簡單,他是在結構體裡建立乙個陣列,兩個int 變數分別記錄陣列長度,當前內寸大小。
插入的邏輯是這樣的:
1.判斷要插入的位置是否合法。(小於1或大於lenth)
2.判斷陣列長度有沒有到記憶體容量極限,若容量滿後應用realloc函式擴大。
3.定義兩個指標,乙個指向要插入的位置,乙個指向最後乙個。
4.從最後乙個元素開始用*(p+1)=*p,依次移動。
5.將值賦給對應的位置。
6.lenth++.
刪除的邏輯要簡單點,但我當時犯了個毛病
for (i=12;i>=10;i--)
這片**,我當時糾結於e從**來,沒有賦值啊。後來看到函式原型才知道,e是傳位址進函式的,e在函式裡賦值。
邏輯:
1.判斷要插入的位置是否合法。
2.宣告兩個指標,乙個指向刪除元素的位址,乙個指向末位址用來做結束迴圈的標誌。
3.用將要被刪除的值儲存進e中
4.*p=*(p+1)
5.lenth--。
基本邏輯就是這樣的。
順序表的建立,插入,刪除
include include typedef struct seqlist pseqlist struct seqlist 定義線表 建立空順序表 pseqlist chuangjianlist int m 引數m是建立的順序表的大小,即max m else free list printf 線表...
順序表的建立 查詢 插入 刪除
順序表 順序表是線性表的順序儲存結構 順序表就是將線性表中的資料元素按照線性順序儲存到指定位置開始的 一塊連續的儲存空間中。順序表c include using namespace std define maxsize 50 線性表不會超過50個元素 typedef int elemtype typ...
順序表的建立 輸出 插入 刪除
1.順序表的建立,一定要記得要分配記憶體,然後就把輸入的數插入進去就可以了。建立順序表 status initlist sq sqlist l,int n l.length n l.listsize list init size return ok 2.插入元素的時候,要判斷位置是否有效,還要注意記...