C++如何改变节点次序节点次序

来源:百度知道 编辑:UC知道 时间:2024/06/11 09:49:40
# include<iostream.h>
# include<conio.h>

struct node{
int data;
node *next;
};

node *create()
{
node*p1,*p2,*head;
head=0;
int a=1,n;
cout<<"输入方阵的行列数:";
cin>>n;
while(a-n*n!=1){
p1=new node;
p1->data=a;
if(head==0)
{
head=p1;p2=p1;}
else{
p2->next=p1;p2=p1;}
a++;
}
if(head)p2->next=0;
return(head);
}

void print(const node *head)
{
const node*p;
p=head;
cout<<"矩阵为:\n";
int n;
cin>>n;
while(p!=0)
{
cout<<p->data<<'\t';
if(p->data%n==0)cout<<'\n';
p=p->next;
}
cout<<'\n';
}
void main()
{
node*head;
head=create();
print(head);
}
我已经用链表表示了一个数组,现在想通过改变链表接点次序来转换数组<

我这有个C版的十字链表 希望能给你有 帮助
#include<stdio.h>
#include<malloc.h>
typedef int ElemType;
typedef struct OLnode{
int i,j;
ElemType e;
struct OLnode * right,* down;
}OLNode, *OLink;
typedef struct {
OLink *rhead,*chead;
int mu,nu,tu;
}CrossList;

int CreateSMatrix_OL(CrossList *M){
//创建稀疏矩阵M。采用十字链表储存表示。
int m,n,t,k,i,j;
ElemType e;
OLNode *p,*q;
if(M) free(M);
M=(CrossList *)malloc(sizeof(CrossList));
scanf("%d,%d,%d",&m,&n,&t);//输入M的行数、列数和非零元个数
M->mu=m;M->nu=n;M->tu=t;
if(!(M->rhead=(OLink *)malloc((m+1)*sizeof(OLink))))
exit(-2);
if(!(M->chead=(OLink *)malloc((n+1)*sizeof(OLink))))
exit(-2);
//初始化行列头指针向量;各行列链表为空链表
for(k=0;k<m+1;k++){
M->rhead[k]=NULL;
}
for(k=0;k<n+1;k++){
M->chead[k]=NULL;
}
//按任意次序输入非零元,以行下标为零结束输入
for(scanf("%d,%d,%