编一个程序,内容如下:包含非0元素少而0元素多的矩阵称为稀疏矩阵。若用完全的二维数组来存储稀疏矩阵会很浪费空间。任意一个稀疏矩阵都可以用一个只有3列的二维数组来存放(数值,行号,列号)。编写一个程序,输入6×8稀疏矩阵sparseMatrix,将其压缩存储至reducedMatrix并打印输出。 要能运行没有错误的!
第1个回答 2010-11-25
#include<stdio.h>
#include<stdlib.h>
struct node
{int date;
struct node *next;
};
struct node *head,*p,*q,*L;
int len;
/* 1--初始化链表 */
initial_List()
{ L=(struct node *)malloc(sizeof(struct node));
L->next=0;
}
/*2 求表长度*/
int List_length()
{int len=0;
while(L->next!=0)
{L=L->next;
len++;
}
return len;
}
/* 3 按序号取元素*/
int get_element(i)
{int x,len=0;
while(len<i)
{L=L->next;
len++;
}
x=L->date;
return x;
}
/* 4 按值查询*/
int List_locate(x)
{int len,i;
while(L->next!=0)len++;
for(i=0;i<len;i++)
else L=L->next;
}
}
/* 5 插入元素 */
List_insert(i,x)
{int len=0;/*,j=1;
len=List_length();
p=(struct node *)malloc(sizeof(struct node));
p->date=x;
if(i==len)
{p->next=0;
L->next=p;
}
else
{
p->next=L->next;
L->next=p;
}*/
while((L->next!=0)&&(len<i-1))
{L=L->next;
len++;
}
if((L->next==0)&&(len<i-1))/*printf("i值不正确!\n");*/
{p->next=0;
L->next=p;
}
else
{p=(struct node *)malloc(sizeof(struct node));
p->date=x;
p->next=L->next;
L->next=p;
}
}
/* 6 删除元素 */
List_delete(i)
{int x,len=0;
while(len<i-1)
{L=L->next;
len++;}
L->next=L->next->next;
free(L->next);
}
main()
{int i=1,x,e,geshu;
while(i)
{printf(" 1--初始化链表 \n");
printf(" 2--求表长度 \n");
printf(" 3--按序号取元素\n");
printf(" 4--按值查询\n");
printf(" 5--插入元素 \n");
printf(" 6--删除元素 \n");
printf(" 0--代表退出\n");
printf(" 请选择!\n");
scanf("%d",&i);
switch(i)
{case 1:initial_List();break;
case 2:geshu=List_length();
printf("链表的个数是:%d\n",geshu);
break;
case 3:printf("请输入要找的序号!");
scanf("%d",&i);
x=get_element(i);
printf("%d\n",x);
break;
case 4:printf("x=");
scanf("%d",&x);
e=List_locate(x);
printf("你要找的数是%d号!",e);
break;
case 5:printf("i=");
scanf("%d",&e);
/*geshu=List_length();
if(i>=geshu)*/
printf("input x=");
scanf("%d",&x);
List_insert(e,x);
break;
case 6:printf("i=");
scanf("%d",&e);
List_delete(e);
break;
case 0:return;break;
default:printf("ERROR!Try again!\n\n");
}
}
getch();
}有些地方有问题!正在改正中,郁闷!够麻烦的!很久没搞过这些了!
我可以帮助你,你先设置我最佳答案后,我百度Hii教你。
#include<stdlib.h>
struct node
{int date;
struct node *next;
};
struct node *head,*p,*q,*L;
int len;
/* 1--初始化链表 */
initial_List()
{ L=(struct node *)malloc(sizeof(struct node));
L->next=0;
}
/*2 求表长度*/
int List_length()
{int len=0;
while(L->next!=0)
{L=L->next;
len++;
}
return len;
}
/* 3 按序号取元素*/
int get_element(i)
{int x,len=0;
while(len<i)
{L=L->next;
len++;
}
x=L->date;
return x;
}
/* 4 按值查询*/
int List_locate(x)
{int len,i;
while(L->next!=0)len++;
for(i=0;i<len;i++)
else L=L->next;
}
}
/* 5 插入元素 */
List_insert(i,x)
{int len=0;/*,j=1;
len=List_length();
p=(struct node *)malloc(sizeof(struct node));
p->date=x;
if(i==len)
{p->next=0;
L->next=p;
}
else
{
p->next=L->next;
L->next=p;
}*/
while((L->next!=0)&&(len<i-1))
{L=L->next;
len++;
}
if((L->next==0)&&(len<i-1))/*printf("i值不正确!\n");*/
{p->next=0;
L->next=p;
}
else
{p=(struct node *)malloc(sizeof(struct node));
p->date=x;
p->next=L->next;
L->next=p;
}
}
/* 6 删除元素 */
List_delete(i)
{int x,len=0;
while(len<i-1)
{L=L->next;
len++;}
L->next=L->next->next;
free(L->next);
}
main()
{int i=1,x,e,geshu;
while(i)
{printf(" 1--初始化链表 \n");
printf(" 2--求表长度 \n");
printf(" 3--按序号取元素\n");
printf(" 4--按值查询\n");
printf(" 5--插入元素 \n");
printf(" 6--删除元素 \n");
printf(" 0--代表退出\n");
printf(" 请选择!\n");
scanf("%d",&i);
switch(i)
{case 1:initial_List();break;
case 2:geshu=List_length();
printf("链表的个数是:%d\n",geshu);
break;
case 3:printf("请输入要找的序号!");
scanf("%d",&i);
x=get_element(i);
printf("%d\n",x);
break;
case 4:printf("x=");
scanf("%d",&x);
e=List_locate(x);
printf("你要找的数是%d号!",e);
break;
case 5:printf("i=");
scanf("%d",&e);
/*geshu=List_length();
if(i>=geshu)*/
printf("input x=");
scanf("%d",&x);
List_insert(e,x);
break;
case 6:printf("i=");
scanf("%d",&e);
List_delete(e);
break;
case 0:return;break;
default:printf("ERROR!Try again!\n\n");
}
}
getch();
}有些地方有问题!正在改正中,郁闷!够麻烦的!很久没搞过这些了!
我可以帮助你,你先设置我最佳答案后,我百度Hii教你。
第2个回答 2010-11-22
不知道我理解的是不是符合你的要求,你先看下吧。下面是我的代码:
#include <iostream>
using namespace std;
int sparseMatrix[6][8], reducedMatrix[48][3];
int main()
{
int i, j, k;
printf("请输入稀疏矩阵:\n");
k = 0;
for(i=0; i<6; i++)
for(j=0; j<8; j++)
{
scanf("%d",&sparseMatrix[i][j]);
if(sparseMatrix[i][j] != 0)
{
reducedMatrix[k][0] = sparseMatrix[i][j]; //数值
reducedMatrix[k][1] = i; //行号
reducedMatrix[k][2] = j; //列号
k++;
}
}
printf("\n压缩后的矩阵:\n");
for(i=0; i<k; i++)
{
for(j=0; j<3; j++)
printf("%5d",reducedMatrix[i][j]);
printf("\n");
}
return 0;
}本回答被提问者采纳
#include <iostream>
using namespace std;
int sparseMatrix[6][8], reducedMatrix[48][3];
int main()
{
int i, j, k;
printf("请输入稀疏矩阵:\n");
k = 0;
for(i=0; i<6; i++)
for(j=0; j<8; j++)
{
scanf("%d",&sparseMatrix[i][j]);
if(sparseMatrix[i][j] != 0)
{
reducedMatrix[k][0] = sparseMatrix[i][j]; //数值
reducedMatrix[k][1] = i; //行号
reducedMatrix[k][2] = j; //列号
k++;
}
}
printf("\n压缩后的矩阵:\n");
for(i=0; i<k; i++)
{
for(j=0; j<3; j++)
printf("%5d",reducedMatrix[i][j]);
printf("\n");
}
return 0;
}本回答被提问者采纳
第3个回答 2010-11-23
参考指针和数组一章最后一个例子,如何动态分配二维数组。另外就是遍历二维数组了。
如果明白了指针和数组一章最后一个例子,如何动态分配二维数组,这个题就迎刃而解了。
以后别总在这种没有技术含量的地方问,去CSDN better
如果明白了指针和数组一章最后一个例子,如何动态分配二维数组,这个题就迎刃而解了。
以后别总在这种没有技术含量的地方问,去CSDN better
第4个回答 2010-11-22
存储稀疏矩阵,使用结构体,
看不懂,什么叫“只有3列的二维数组”本回答被网友采纳
看不懂,什么叫“只有3列的二维数组”本回答被网友采纳