但行好事,莫问前程

矩阵

稀疏矩阵

//存放稀疏矩阵的东西
#include<iostream>
using namespace std;
typedef int datatype;
#define smax 100
typedef struct
{
    int i, j;//行数,列数
    datatype v;//值
}node;
typedef struct
{
    int m, n, t;//m×n维矩阵,t为非零元素个数
    node data[smax];
}spmatrix;
spmatrix *creat()
{
    int m, n, t,i,j;
    datatype v;
    spmatrix *p;
    p=(spmatrix*)malloc(sizeof(spmatrix));
    cout << "please input lines and cols and element number:" << endl;
    cin >> m >> n >> t;
    p->m = m;p->n = n;p->t = t;
    cout << "please input element(cols number 、lines number、data  ):" << endl;
    for (int x = 0;x < t;x++)
    {
        cin >> i >> j >> v;
        if (i > m || j > n) { cout << "have error." << endl;return NULL; }
        p->data[x].i = i;p->data[x].j = j;p->data[x].v = v;
    }
    return p;
}
void display(spmatrix *p)
{
    int m,n;
    int t1 = 0;
    m = p->m;n = p->n;
    for (int x = 0;x < m;x++)
    {
        for(int x1=0;x1<n;x1++)
        {
            if (x == p->data[t1].i && x1==p->data[t1].j) { cout << p->data[t1].v << "  ";++t1; }
            else { cout << 0 << "  "; }
        }
        cout << endl;
    }

}
spmatrix transmat(spmatrix *a)
{
    spmatrix *b;
    b =(spmatrix *) malloc(sizeof(spmatrix));
    int m, n, t,bno=0;
    m = a->m;n = a->n;t = a->t;
    b->m = n;b->n = m;b->t = t;
    for (int i = 0;i < m;i++)
    {

        for (int t1 = 0;t1 <a->t;t1++)
        {

            if ((i == (a->data[t1].i-1)))
            {
                b->data[bno].j = a->data[t1].i;
                b->data[bno].i = a->data[t1].j;
                b->data[bno].v = a->data[t1].v;
                bno++;
            }
        }
    }
    return *b;
}
int  main()
{
    spmatrix *p;
    p = creat();
    display(p);
    return 0;
}

十字链表发

#include<iostream>
using namespace std;
typedef int datatype;
#define smax 100
typedef struct Inode
{
	int i, j;
	struct Inode *cptr, *rptr;
	union
	{
		struct Inode *next;
		datatype v;
	}uval;
}link;
link *creatlinkmat()
{
	link *p, *q, *L, *cp[smax];
	int i, j, m, n, t, s;
	datatype v;
	cout << "please input lines and cols and element: " << endl;
	cin >> m >> n >> t;
	if (m > n)s = m;
	else s = n;
	L = (link*)malloc(sizeof(link));
	L->i = m;L->j = n;
	cp[0] = L;
	for (i = 1;i <= s;i++)//建立表头节点
	{
		p = (link*)malloc(sizeof(link));
		p->i = 0;p->j = 0;
		p->rptr = p;
		p->cptr = p;
		cp[i] = p;
		cp[i-1]->uval.next = p;
	}
	cp[s]->uval.next = L;
	for (i = 1;i <= t;i++)
	{
		cin >> i >> j >> v;
		p = (link*)malloc(sizeof(link));//新建立节点,储存非零元素
		p->i = i;p->j = j;p->uval.v = v;
		q = cp[i];//取i行(列)的表头节点
		while ((q->rptr != cp[i]) && (q->rptr->j < j))q = q->rptr;
		p->rptr = q->rptr;
		q = cp[j];
		while ((q->cptr != cp[j]) && (q->cptr->i < i))q = q->cptr;
		p->cptr = q->cptr;
		q->cptr = p;
		
	}
		return L;

}
void main()
	{
		link k;
		k = *creatlinkmat();
	}
posted @ 2018-10-15 14:34  专业路过  阅读(130)  评论(0编辑  收藏  举报