C語言資料結構 陣列矩陣

2021-10-01 19:57:09 字數 4752 閱讀 5057

#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...