浏览 2130 次
锁定老帖子 主题:十字链表定义创建查找
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-06-29
#include<iostream> #define TRUE 1 #define FALSE 0 #define MAX 999 using namespace std; //十字链表的元素定义 typedef struct OLNode{ OLNode *right; OLNode *down; int iIndex,jIndex,value; }OLNode,*OLink; //十字链表的定义 typedef struct CrossList{ OLink rhead[MAX+1],chead[MAX+1]; int m,n,len; }CrossList; //创建十字链表 void CreateCrossList(CrossList *M) { int m,n,len,k; cout<<"输入十字链表的行数,列数,元素个数\n"; cin>>m>>n>>len; M->m=m;M->n=n;M->len=len; //每行每列头指针初始为空 for(k=1;k<=M->m;k++) M->rhead[k]=NULL; for(k=1;k<=M->n;k++ ) M->chead[k]=NULL; int row,col,value; //将元素插入到十字链表中 for(cin>>row>>col>>value;row!=0;cin>>row>>col>>value) { OLNode *p=(OLNode*)malloc(sizeof(OLNode)); p->iIndex=row;p->jIndex=col; p->value=value; OLNode *q1=M->rhead[row]; //如果该行头指针为空,或者该行头指针指向元素的列标大于插入的列标 if(q1==NULL||M->rhead[row]->jIndex>col){ p->right=M->rhead[row]; M->rhead[row]=p; } else{ //寻找插入点 for(;q1->right!=NULL&&q1->right->jIndex<col;q1=q1->right); p->right=q1->right;q1->right=p; } q1=M->chead[col]; if(q1==NULL||M->chead[col]->iIndex>row){ p->down=M->chead[col]; M->chead[col]=p; } else{ for(;q1->down!=NULL&&q1->down->iIndex<row;q1=q1->down); p->down=q1->down;q1->down=p; } } } //输出十字链表的内容 void PrintCrossList(CrossList *M) { int rowLength=M->m,currentRow=1; for(int row=1;row<=rowLength;row++) { OLNode *p=M->rhead[row]; while(p!=NULL) { cout<<p->value<<" "; p=p->right; } cout<<"\n"; } } //查找i行,j列元素的值,找不到返回-1 int FindNode(CrossList *M,int i,int j) { if(i>M->m||i<=0||j>M->n||j<=0){ cout<<"不存在该元素\n"; return -1; } OLNode *p=M->rhead[i]; for(;p!=NULL&&p->jIndex<j;p=p->right); if(p==NULL||p->jIndex>j) return 0; return p->value; } int main() { char cmd; int i,j; do{ CrossList *M=(CrossList*)malloc(sizeof(CrossList)); CreateCrossList(M); PrintCrossList(M); cout<<"查找某一元素的值,请输入i,j\n"; cin>>i>>j; cout<<"元素的值为\n"; cout<<FindNode(M,i,j)<<"\n"; cout<<"Y/y继续\n"; cin>>cmd; }while(cmd=='Y'||cmd=='y'); return 0; } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |