静态链表的输出有点问题,大家给看看
程序代码:
#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(); }在输出时,说访问地址有错误,大家给看看