#include<iostream.h>
#include<stdio.h>
#include<iomanip.h>
#include<stdlib.h>
struct linknode
{
int rows,cols;
linknode *down,*right;
union vnext
{
int v;
linknode *next;
}node;
};
linknode *CreateMatlind();
linknode *InputMatlind(linknode,int);
void ShowMatlind(linknode);
void SearchMatlind(linknode *hm,int s);
linknode *CreateMatlind()
{
int i,j,maxlin;
linknode *hm,*cp[100],*p;
printf("\n\t\t請輸入稀疏矩陣的行數,列數(用逗號隔開): ");
scanf("%d,%d",&i,&j);
if (i>j)
maxlin=i;
else
maxlin=j;
hm=new linknode;
cp[0]=hm;
for (int l=1;l<=maxlin;l++)
{
p=new linknode;
p->rows=0;
p->cols=0;
p->down=p;
p->right=p;
cp[l]=p;
cp[l-1]->node.next=p;
}
cp[maxlin]->node.next=hm;
hm=new linknode;
hm->rows=i;
hm->cols=j;
return hm;
}
linknode *InputMatlind(linknode *hm,int s)
{
linknode *cp[100],*p,*q;
int m,n,t;
int i,j,k,maxlin;
i=hm->rows;
j=hm->cols;
if (i>j)
maxlin=i;
else
maxlin=j;
cp[0]=hm;
for (int l=1;l<=maxlin;l++)
{
p=new linknode;
p->rows=0;
p->cols=0;
p->down=p;
p->right=p;
cp[l]=p;
cp[l-1]->node.next=p;
}
cp[maxlin]->node.next=hm;
for (int x=0;x<s;x++)
{
printf("\n\t\t請輸入非零元素的行號,列號和值(用逗號隔開): ");
scanf("%d,%d,%d",&m,&n,&t);
p=new linknode;
p->rows=m;
p->cols=n;
p->node.v=t;
k=1;
q=cp[m];
while (k)
{
if ((q->right==cp[m]) || (q->right->cols>n))
{
p->right=q->right;
q->right=p;
k=0;
}
else if(q->right->cols==n)
{
p->right=q->right->right;
q->right=p;
k=0;
}
else if(q->right->cols<n)
{
q=q->right;
k=1;
}
}
k=1;
q=cp[n];
while (k)
{
if ((q->down==cp[n]) || (q->down->rows>m))
{
p->down=q->down;
q->down=p;
k=0;
}
else if (q->down->rows==m)
{
p->down=q->down->down;
q->down=p;
k=0;
}
else if (q->down->rows<m)
{
q=q->down;
k=1;
}
}
}
return hm;
}
void ShowMatlind(linknode *hm)
{
int m,n;
linknode *p,*q;
m=hm->rows;
n=hm->cols;
q=p=hm->node.next;
p=p->right;
cout<<endl<<endl;
printf("\n\t\t");
for (int i=1;i<=m;i++)
{
for (int j=1;j<=n;j++)
{
if ((p->rows==i) && (p->cols==j))
{
printf("%8d",p->node.v);
}
else
printf("%8c",'0');
if ((j==n) && (p->right==q))
break;
else if (p->right!=q)
p=p->right;
}
printf("\n\n\t\t");
p=q;
q=p=p->node.next;
p=p->right;
}
}
void SearchMatlind(linknode *hm,int s)
{
int m,n,k;
linknode *p,*q;
m=hm->rows;n=hm->cols;
q=p=hm->node.next;
p=p->right;
k=1;
while(k)
{
if ((p->node.v)==s)
{
printf("\n\t\t 行 列 值\n");
printf("\n\t\t元素位置:第%2d行第%2d列 %2d\n",p->rows,p->cols,p->node.v);
k=0;
}
else if (p->right!=q)
p=p->right;
else
{
p=q;
q=p=p->node.next;
if (p==hm)
{
printf("\n\t\t十字鏈表中無此元素! \n");
k=0;
}
p=p->right;
}
}
}
void main()
{
int s,k,ch=1;
int choice;
linknode *hm=NULL;
while (ch)
{
printf("\n");
printf("\n\t\t 稀疏矩陣的十字鏈表存盤系統\n");
printf("\n\t\t********************************************");
printf("\n\t\t* 1-----新建十字鏈表 *");
printf("\n\t\t* 2-----顯示十字鏈表 *");
printf("\n\t\t* 3-----查 找 元 素 *");
printf("\n\t\t* 0-----退 出 *");
printf("\n\t\t********************************************");
printf("\n\n\t\t 請輸入選單號: ");
scanf("%d",&choice);
switch(choice)
{
case 1:
hm=CreateMatlind();
do
{
printf("\n\t\t請輸入稀疏矩陣的非零元素個數: ");
scanf("%d",&s);
if (s>((hm->rows)*(hm->cols)))
{
printf("\n\t\t元素個數錯誤! 應小于或等于%d個\n",hm->rows*hm->cols);
k=1;
}
else
k=0;
}while (k);
hm=InputMatlind(hm,s);
break;
case 2:
if (hm==NULL)
{
printf("\n\t\t鏈表為空! \n");
break;
}
else
{
ShowMatlind(hm);
break;
}
case 3:
if (hm==NULL)
{
printf("\n\t\t鏈表為空! \n");
break;
}
else
{
printf("\n\t\t請輸入您要查找的元素: ");
scanf("%d",&s);
SearchMatlind(hm,s);
break;
}
case 0:
ch=0;
break;
}
if (choice==1 || choice==2 || choice==3)
{
printf("\n\t\t");
system("pause");
system("cls");
}
}
}
uj5u.com熱心網友回復:
你需要描述一下具體的錯誤,不然這么多代碼,誰也沒有那么多時間去看uj5u.com熱心網友回復:
這是它的錯誤,實在不知道哪里錯了。
uj5u.com熱心網友回復:
這里不是有行嗎,c2061就是第2061行,這是語法錯誤,檢查你的語法,看到下面有}那應該是這些符號,你看看,在下面缺失,差不多都是括號的問題,你把括號先全部對其了再問別的,書寫代碼的時候規范一點,哪怕一句代碼該加{]都加上,然后最好打了前面的一半就補上后面的,再從中間寫代碼,這樣就能避免大部分的缺失錯誤
uj5u.com熱心網友回復:
感謝,我已經改好了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/64568.html
標籤:C語言
下一篇:C語言學習求助
