![]() |
#2
陌小熙2012-10-18 15:15
试试
|

#include<stdio.h>
#define MAXSIZE 100
typedef int datatype;
typedef struct node
{
datatype data;
int link;
}snode;
typedef struct
{
snode nodes[MAXSIZE];
int newptr;
}slinklist;
void initlist(slinklist sl)
{
int i;
sl.nodes[0].link=1;
sl.newptr=1;
for(i=1;i<MAXSIZE-1;i++)
sl.nodes[i].link=i+1;
sl.nodes[MAXSIZE-1].link=-1;
}
void ceratlist(slinklist sl)
{
int i=1,j;
printf("请输入数据到-1时结束:\n");
scanf("%d",&j);
while(j!=-1)
{
sl.nodes[i].data=j;
i++;
sl.newptr++;
if(i>MAXSIZE-1) break;
scanf("%d",&j);
}
sl.nodes[i-1].link=-1;
}
int find(slinklist sl,datatype x) //按值查找
{
int p=sl.nodes[0].link;
while(p!=-1)
if(sl.nodes[p].data!=x)
p=sl.nodes[p].link;
else
break;
return p;
}
int locate(slinklist sl,int i) //按结点查找
{
int j=0,p=sl.nodes[0].link;
if(i<0)
return -1;
while(p!=-1&&j<i)
{
p=sl.nodes[p].link;
j++;
}
if(i==0)
return 0;
return p;
}
int insert(slinklist sl,int i,datatype x) //在静态链表第I个结点处插入一个新结点
{
int p=locate(sl,i-1); //查找i之前的一个结点
int q=sl.newptr;
if(p=-1)
return 0;//新结点
sl.newptr=sl.nodes[sl.newptr].link;
sl.nodes[q].data=x;
sl.nodes[q].link=sl.nodes[p].link;
sl.nodes[p].link=q;
return 1;
}
//移除
int remove(slinklist sl,int i)
{
int p=locate(sl,i-1);
int q=sl.nodes[p].link;
if(p==-1)
return 0;
sl.nodes[p].link=sl.nodes[q].link;
sl.nodes[q].link=sl.newptr;
sl.newptr=q;
return 1;
}
void output(slinklist sl)
{
int i,q;
i=0;q=1;
printf("输出数据:\n");
while(sl.nodes[q].link!=-1)
{
printf("%d\t",sl.nodes[q].data);
q=sl.nodes[q].link;
i++;
if(i%5==0)
printf("\n");
}
}
void main()
{
slinklist a;
initlist(a);
ceratlist(a);
output(a);
getch();
}
在输出时,说访问地址有错误,大家给看看 #define MAXSIZE 100
typedef int datatype;
typedef struct node
{
datatype data;
int link;
}snode;
typedef struct
{
snode nodes[MAXSIZE];
int newptr;
}slinklist;
void initlist(slinklist sl)
{
int i;
sl.nodes[0].link=1;
sl.newptr=1;
for(i=1;i<MAXSIZE-1;i++)
sl.nodes[i].link=i+1;
sl.nodes[MAXSIZE-1].link=-1;
}
void ceratlist(slinklist sl)
{
int i=1,j;
printf("请输入数据到-1时结束:\n");
scanf("%d",&j);
while(j!=-1)
{
sl.nodes[i].data=j;
i++;
sl.newptr++;
if(i>MAXSIZE-1) break;
scanf("%d",&j);
}
sl.nodes[i-1].link=-1;
}
int find(slinklist sl,datatype x) //按值查找
{
int p=sl.nodes[0].link;
while(p!=-1)
if(sl.nodes[p].data!=x)
p=sl.nodes[p].link;
else
break;
return p;
}
int locate(slinklist sl,int i) //按结点查找
{
int j=0,p=sl.nodes[0].link;
if(i<0)
return -1;
while(p!=-1&&j<i)
{
p=sl.nodes[p].link;
j++;
}
if(i==0)
return 0;
return p;
}
int insert(slinklist sl,int i,datatype x) //在静态链表第I个结点处插入一个新结点
{
int p=locate(sl,i-1); //查找i之前的一个结点
int q=sl.newptr;
if(p=-1)
return 0;//新结点
sl.newptr=sl.nodes[sl.newptr].link;
sl.nodes[q].data=x;
sl.nodes[q].link=sl.nodes[p].link;
sl.nodes[p].link=q;
return 1;
}
//移除
int remove(slinklist sl,int i)
{
int p=locate(sl,i-1);
int q=sl.nodes[p].link;
if(p==-1)
return 0;
sl.nodes[p].link=sl.nodes[q].link;
sl.nodes[q].link=sl.newptr;
sl.newptr=q;
return 1;
}
void output(slinklist sl)
{
int i,q;
i=0;q=1;
printf("输出数据:\n");
while(sl.nodes[q].link!=-1)
{
printf("%d\t",sl.nodes[q].data);
q=sl.nodes[q].link;
i++;
if(i%5==0)
printf("\n");
}
}
void main()
{
slinklist a;
initlist(a);
ceratlist(a);
output(a);
getch();
}