2.1線性表
2.1.1多項式的表示
f(x)=a0+a1x+…+a[n-1]*x^(n-1)+ a[n]*x的n次方
如何表達 :A[i]
指數i
多項式項數n
順序儲存結構
1.直接表示
令n=i
問題:表示x+x^345的空間資源過於浪費
2.只表示非零項,將多項式項數看成二元表(n,A[i])
用結構陣列表示:陣列分量是由指數,係陣列成的結構
3.運算方便
按照指數大小有序儲存
連結串列結構儲存非零項
連結串列包括每個結點儲存多項式中的一個非零項;包括係數和指數兩個資料域和一個指標域
typedef struct PolyNode *Polynomial;
struct PolyNode{
int A;
int n;
Polynomial link;
}
線性表描述
線性表利用陣列的連續儲存空間順序存放線性表的各元素
typedef struct LNode* List;
struct LNode{
ElementType Data[MAXSIZE];
int Last
};
struct LNode L;
List PtrL;
訪問下標為i的元素:L.Data[i],PtrL->Data[i]
線性表的長度:L.Last+1;/PtrL->Last+1
額外補充
摘自:
https://blog.csdn.net/Poo_Chai/article/details/100605509
typedef struct Student2
{
int a;
}stu2;//stu2是一個結構體型別=struct Student
stu2必須先 stu2 s2;
然後 s2.a=10;
主要操作的實現
補充:malloc是動態記憶體分配函式。
a=(char*)malloc(100*sizeof(char));//使用malloc分配記憶體的首地址,然後賦值給a
1.初始化
List MakeEmpty()
{
List ptrL;
ptrL = (List)malloc(sizeof(stuct LNode));
ptrL->Last = -1;
return ptrL
}
2.查詢元素位置
int Find(ElementType h,List ptrL){
int i = 0;
while(i <= ptrL->Last && h!=ptrL->Data[i]){
i++;
}
if (h!=ptrL->Data[i])
return i;//找到後返回儲存位置
else
return -1;
}
3.插入(第i(1<=i<=n+1)個位置上插入一個值為x的新元素)
從最後一個開始往後挪
void Insert(ElementType X,int i, List PtrL){
{
int j ;
//表滿
if(PtrL->Last = Maxsize-1)
return;
//滿足(1<=i<=n+1)
if(i<1 && i>PtrL->Last)
return;
//交換
for(j = Maxsize+1;j>i; j--){
PtrL->Data[j+1]=PtrL->Data[j];
PtrL->Data[i]=X;
PtrL->Last++;
return;
}
}
4.刪除第i(1<=i<=n)個位置上的元素
注意第i個位置和陣列從零開始
void Delete(int i,List PtrL)
{
//檢驗空表和位置的合法性
int j;
if(i<1||i>PtrL->Last+1){
printf("不存在第%d個元素",i);
return;
}
for(j = i;j<=ptrL->Last; j++){
PtrL->Data[j-1]=PtrL->Data[j];
PtrL->Last--;
return;
}
}
鏈式儲存結構
不要求邏輯上相鄰的兩個元素物理上也相鄰;通過‘鏈’建立邏輯關係
typedef struct Lnode* List;
struct Lnode{
ElementType Data;
List Next;
}
struct Lnode L;
List PtrL;
求長度
int Length(List PtrL)//List PtrL為頭指標
{
List p = PtrL;
int j =0;
while(p){
p=p->next;
j++;
}
return j;
}
查詢
1.按序號查詢
List FindKth(int K ,List PtrL)
{
List p = PtrL;
int i = 1;
while (p!=null && K<i)
{
p=p->next;
i++;
}
if(K = i) return p;
else return null;
}
按值查詢
List FindKth(ElementType X ,List PtrL){
List p = PtrL;
while(p!=null && X!=p->Data)
{
p=p->next;
}
return p ;
}
3.插入(在第i-1(1<=i<=n+1)個結點後插入一個值為x的新節點)
1.先造一個新節點,用s指標指向
2.p指向第i-1個節點
3.將新節點尾部接p->next
4.p指向s
List Insert(ElementType X,int i,List PtrL)
{ List p,s;
if(i==1){
s = (List)malloc(sizeof(struct LNode));
s->next= PtrL;//PtrL頭指標
s->data=X;
return s;
}
p=FindKth(i-1,PtrL);//查詢第i-1個結點
if(p==null){
return null;
}
else{
s = (List)malloc(sizeof(struct LNode));
s->data = X;
s-> next = p->next;
p->next = s;
return PtrL;
}
}
4.刪除(刪除連結串列的第i (1<i<n)個位置上的結點)
List Delete (int i,List PtrL)
{
List p,s;
if (i==1){
s=PtrL;
if(PtrL = null) return null;//先檢查PtrL頭結點是否為空
else PtrL = PtrL->next;
free(s);
return PtrL;
}
p=FindKth(i-1,PtrL);//查詢第i-1個結點
if(p==null) return null;
elseif(p->next=null) return null;
else{
s = p->next;
p->next = p->next->next;
free(s);
return PtrL;
}
}
相關文章
- 線性表
- 線性表 & 雜湊表
- Chapter 1 線性表APT
- 線性表學習1
- 線性表——連結串列
- 線性表及其實現
- 線性表的基本操作
- ds_c02 線性表
- [資料結構] - 線性表資料結構
- 資料結構——線性表資料結構
- 資料結構 | 線性表資料結構
- 資料結構-線性表資料結構
- 資料結構—線性表資料結構
- 資料結構 - 線性表 - 順序表資料結構
- 考研資料結構-線性表-順序表資料結構
- 線性表-順序表C語言實現C語言
- Java內功祕籍-線性表Java
- 線性表1.0(陣列實現)陣列
- 線性表的結構詳解
- 資料結構:線性表-例題資料結構
- 線性表__資料結構筆記資料結構筆記
- 線性表的使用——順序實現
- 機器學習入門學習筆記:(2.1)線性迴歸理論推導機器學習筆記
- 資料結構-線性表、連結串列資料結構
- 線性表之順序儲存結構
- 線性表之鏈式儲存結構
- 圖示加程式碼 搞懂線性表(一)
- 線性表的理論知識總結
- 資料結構——線性表P35.1資料結構
- 線性表及其演算法(java實現)演算法Java
- 資料結構筆記——線性表(下)資料結構筆記
- go語言使用切片實現線性表Go
- 資料結構筆記——線性表(中)資料結構筆記
- 資料結構與演算法 | 線性表 —— 順序表資料結構演算法
- 資料結構線性表兩種方式分享資料結構
- 【資料結構】線性表-單連結串列資料結構
- 實驗2.2 線性表的應用:遊戲遊戲
- 11 線性表的順序儲存結構