首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

数据结构邻接表的有关问题!

2012-04-13 
数据结构邻接表的问题!!#include stdio.h#include conio.h#include math.h#define Max 50typedef st

数据结构邻接表的问题!!
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define Max 50
typedef struct vex
{
int ve;
struct vex *next;
}vec;

typedef struct biao
{
int data;
vec *fir;
}VexNode;
VexNode No[Max];
 
int cretatenode()
{
vec *ptr;
int i,ve,vc,v1,v2;
printf("请输入你顶点数和边数=");
scanf("%d,%d",&ve,&vc);
for(i=0;i<ve;i++)/*这里是对链接为NULL*/
{
No[i].fir=NULL;
}
for(i=0;i<vc;i++)/*这里是边数*/
{
printf("请输入v1,v2=");
scanf("%d,%d",&v1,&v2);
ptr=(vec *)malloc(sizeof(vec));
ptr->ve=v2;
ptr->next=No[v1].fir;
No[v1].fir=ptr;


ptr=(vec *)malloc(sizeof(vec));
ptr->ve=v1;
ptr->next=No[v2].fir;
No[v2].fir=ptr;
}
return vc;
}

main(void)
{  
vec *ptr;
int i,n;
n=cretatenode();
for(i=0;i<n;i++)
{
printf("%d==>",i);
ptr=No[i].fir;
while(ptr!=NULL)
{
printf("---->%d",ptr->ve);
ptr=ptr->next;
}
printf("\n");
}
}


输出为:
为什么先输出2而不是输出1呢?是因为建立表的时候1被2所连接到前面?是吗?
0==>--->2---->1
1==>--->3---->0
2==>--->3---->0
3==>--->2---->1

[解决办法]
对的。
1.头插法   单链表是用户不断申请存储单元和改变链接关系而得到的一种特殊数据结构,将链表的左边称为链头,右边称为链尾。头插法建单链表是将链表右端看成固定的,链表不断向左延伸而得到的。头插法最先得到的是尾结点。   由于链表的长度是随机的,故用一个while循环来控制链表中结点个数。假设每个结点的值都大于O,则循环条件为输入的值大于o。申请存储空间可使用malloc()函数实现,需设立一申请单元指针,但malloc()函数得到的指针并不是指向结构体的指针,需使用强制类型转换,将其转换成结构体型指针。刚开始时,链表还没建立,是一空链表,head指针为NULL。   链表建立的过程是申请空间、得到数据、建立链接的循环处理过程。   2.尾插法    若将链表的左端固定,链表不断向右延伸,这种建立链表的方法称为尾插法。尾插法建立链表时,头指针固定不动,故必须设立一个搜索指针,向链表右边延伸,则整个算法中应设立三个链表指针,即头指针head、搜索指针p2、申请单元指针pl。尾插法最先得到的是头结点。 

探讨
引用:

创建链表时,有结点往前插入和往后插入,这样看你创建时应该是往前插入的。

用通俗话来点就是2插在了1前面是吗?

热点排行