十字链表(数据结构试验)

前见天才开博,也不知道写什么,自己平时比较好玩,也没学到什么东西,今天突然想写些东西,但脑子里一片空白~真是书到用时方恨少。

昨天晚上数据结构试验要求建一个十字链表~

下面是我用C写的代码,写的不好,但毕竟是我博客的第一篇文章,以此来纪念我正式开博~~~

以后还希望各路高手多多指教。

 

代码
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<malloc.h>
4 typedef struct OLNode
5 {
6 int i,j;
7 int e;
8 struct OLNode *right,*down;
9 }OLNode,*OLink;
10 typedef struct Crosslist
11 {
12 OLink *rhead,*chead;
13 int mu,nu,tu;
14 }CrossList;
15  int CreateSMatrix_OL(CrossList &M)
16 {
17 int m,n,t,i,j,e;
18 OLink p,q;
19 scanf("%d %d %d",&m,&n,&t);//m为行的大小,n为列的大小,t为非零元 的个数
20   M.mu=m;M.nu=n;M.tu=t;
21 if(!(M.rhead=(OLink *)malloc((m+1)*sizeof(OLink))))
22 exit(0);
23 if(!(M.chead=(OLink *)malloc((n+1)*sizeof(OLink))))
24 exit(0);
25 for(i=0;i<M.mu;i++)
26 M.rhead[i]=NULL;
27 for(i=0;i<M.nu;i++)
28 M.chead[i]=NULL;
29 for(t=0;t<M.tu;t++)
30 {
31 scanf("%d %d %d",&i,&j,&e);
32 p=(OLNode *)malloc(sizeof(OLNode));
33 p->i=i;
34 p->j=j;
35 p->e=e;
36 if(M.rhead[i]==NULL||M.rhead[i]->j>j)
37 {
38 p->right=M.rhead[i];
39 M.rhead[i]=p;
40 }
41 else
42 {
43 for(q=M.rhead[i];(q->right)&&q->right->j<j;q=q->right);
44 p->right=q->right;
45 q->right=p;
46
47 }
48 if(M.chead[j]==NULL||M.chead[j]->i>i)
49 {
50 p->down=M.chead[j];
51 M.chead[j]=p;
52 }
53 else
54 {
55 for(q=M.chead[j];(q->down)&&q->down->i<i;q=q->down);
56 p->down=q->down;
57 q->down=p;
58 }
59
60 }
61 return 0;
62
63 }
64 void display(CrossList M)
65 {
66 int i;
67 OLink p;
68 printf("i\tj\te\n");
69 for(i=0;i<M.mu;i++)
70 for(p=M.rhead[i];p!=NULL;p=p->right)
71 printf("%d\t%d\t%d\n",p->i,p->j,p->e);
72 }
73 void main()
74 {
75 CrossList M;
76 CreateSMatrix_OL(M);
77 display(M);
78
79
80 }
81
82

 

posted @ 2010-05-18 11:07  feikea  阅读(263)  评论(1编辑  收藏  举报