#ifndef array_h
#define array_h
#include"head.h"
#define max_array_dim 8
#define mu 20
#define nu 20
#define max_array_size 12500
//陣列
typedef struct array;
////理解定義可參考
////三元組順序表
typedef struct triple;
typedef struct tsmartix;
//行邏輯鏈結的順序表
typedef struct rlsmartix;
//十字鍊錶
typedef struct olnode olnode, * olink;
typedef struct crosslist;
//廣義表
typedef enum elemtag;
typedef struct glnode ptr;
};}glnode, * glist;//廣義表的鏈式儲存
typedef struct mpnode ;
struct mpnode* tp;
}*mplist;
//陣列的建立
status initarray(array* a, int dim, ...);
//十字鍊錶的建立
status initcrosslist(crosslist* c, file* fp);
//銷毀
status destoryarray(array* a);
//元素定位
status locatearray(array a, va_list ap, int* off);
//獲取下標所指元素的值
status valuearray(array a, elemtype_int* e, ...);
//將e賦給所指下標元素
status assign(array* a, elemtype_int e, ...);
//三元組順序表
//矩陣的加法
//賦值函式
void assigntsm(triple* t, int i, int j, int e);
//把b中的從i到j的元素賦給a從p開始
void copytsmartix(tsmartix* a, tsmartix b, int i, int j, int p);
status addtsmartix(tsmartix* a, tsmartix b);
//十字鍊錶的加法
status addcrosslist(crosslist* a, crosslist b);
//矩陣的轉置
status transtsmartix(tsmartix* a, tsmartix b);
//快速轉置
status fasttranstsmartix(tsmartix* a, tsmartix b);
//矩陣的乘法
//行邏輯鏈結的順序表
status multrlsmartix(rlsmartix a, rlsmartix b, rlsmartix* m);
//十字鍊錶
status multcrosslist(crosslist a, crosslist b, crosslist* m);
//列印輸出
status outputarray(array a);
status outputtsmatix(tsmartix t);
status outputrlsmartix(rlsmartix m);
status outputcrosslink(crosslist l);
#endif // !array_h
#ifndef array_c
#define array_c
#include"array.h"
//陣列的建立
status initarray(array* a, int dim, ...)
va_end(ap);
(*a).base = malloc(elemtotal, elemtype_int);
(*a).constants[dim - 1] = 1;
for (i = dim - 2; i >= 0; i--)
(*a).constants[i] = (*a).bounds[i + 1] * (*a).constants[i + 1];
return ok;
}//十字鍊錶的建立
status initcrosslist(crosslist* c, file* fp)
else
if (!(*c).chead[p->j] || (*c).chead[p->j]->j > p->j)
else
} return ok;
}//銷毀
status destoryarray(array* a)
//元素定位
status locatearray(array a, va_list ap, int* off)
return ok;
}//獲取下標所指元素的值
status valuearray(array a, elemtype_int* e, ...)
//將e賦給所指下標元素
status assign(array* a, elemtype_int e, ...)
//三元組順序表
//矩陣的加法
//賦值函式
void assigntsm(triple* t, int i, int j, int e)
//把b中的從i到j的元素賦給a從p開始
void copytsmartix(tsmartix* a, tsmartix b, int i, int j, int p)
}status addtsmartix(tsmartix* a, tsmartix b)
else if ((*a).data[count1].j > b.data[count2].j)
else
else if ((*a).data[count1].i < b.data[count2].i)
else
count--;
} if (!count1)
} else
copytsmartix(a, *a, count, max_array_size, count1);
return ok;
}//十字鍊錶的加法
status addcrosslist(crosslist* a, crosslist b)
else
p = p->right;
}} else
else if (p->j > q->j)
else
if (!(*a).chead[p->i] || (*a).chead[p->i]->i > p->i)
else
pre = p;
p = p->right;
}else
q = q->right;
}if (!q && p)//p到行尾但q還沒到
goto loop1;
} }}//矩陣的轉置
status transtsmartix(tsmartix* a, tsmartix b)
}//快速轉置
status fasttranstsmartix(tsmartix* a, tsmartix b)
return ok;
}//矩陣的乘法
//行邏輯鏈結的順序表
status multrlsmartix(rlsmartix a, rlsmartix b, rlsmartix* m) //for p
for (ccol = 1; ccol <= b.nu; ccol++) //if
}//for ccol
} }free(ctemp);
ctemp = null;
return ok;
}//十字鍊錶
status multcrosslist(crosslist a, crosslist b, crosslist* m)
for(i=1;ii = arow;
p->j = i;
p->e = ctemp[i];
if (!(*m).rhead[p->i] || (*m).rhead[p->i]->j > p->j)
else
if (!(*m).chead[p->j] || (*m).chead[p->j]->j > p->j)
else
}} free(ctemp);
return ok;
}//列印輸出
status outputarray(array a)
printf("\n");
return ok;
}status outputtsmatix(tsmartix t)
printf("\n");
return ok;
}status outputrlsmartix(rlsmartix m)
status outputcrosslink(crosslist l)
} printf("\n");
return ok;
}#endif // !array_c
C 資料結構 (捌陣列和矩陣)
特殊矩陣的壓縮儲存 稀疏矩陣 陣列的邏輯結構 陣列可以看作是線性表的推廣,其特點是結構中的元素本身可以是有某種結構的資料元素,但屬於同一型別。陣列是乙個具有固定格式和數量的有序集,每乙個元素都有唯一下標標識,因此,陣列不能做插入或刪除元素的操作。陣列操作 陣列的記憶體映像 陣列在記憶體中被映像為向量...
資料結構實驗 陣列矩陣操作
害,怎麼有種寫c語言作業的感覺 大一學的c語言很多都已經忘了 矩陣的轉置,乘法等基本操作。可以用普通矩陣,也可以用三元組 include 轉置 voidf1 getchar printf 以下是轉置後的矩陣 n for int i 0 i printf n 乘法 voidf2 getchar pri...
資料結構 陣列和稀疏矩陣
稀疏矩陣 將陣列的所有元素儲存在一塊位址連續的記憶體單元中,這是一種順序儲存結構。性質 1 陣列中的資料元素數目固定 2 陣列中的所有資料元素具有相同的資料型別 3 陣列中的每個資料元素都有一組唯一的下標 4 陣列是一種隨機儲存結構,可隨機訪問陣列中的任意資料元素。一維陣列 loc ai loc a...