问题是void InitList(Sqlist *L) ,这里只是设置了len不就相当于什么都没做吗,传递结点地址怎么就初始化成结点数组,即链表了?
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define NO 0
#define MAXSIZE 20
typedef int bool;
typedef int ElemType;
int nn=0;
typedef struct
{
int data[MAXSIZE];
int len;
} Sqlist;
void InitList(Sqlist *L) ///传递结点地址而已,怎么会初始链表
{
L->len=0;
}
ElemType FindElem(Sqlist L,int n)
{
ElemType e;
if(n>L.len)
return 0;
return L.data[n-1];
}
bool ListInsert(Sqlist *L,int n,ElemType data)
{
int i;
if(L->len==MAXSIZE||n>L->len+1)
return 0;
for(i=L->len+1; i>=n; i--)
{
if(L->len==MAXSIZE-1)
break;
L->data[i]=L->data[i-1];
}
L->data[n-1]=++nn;
L->len++;
return 1;
}
bool ListDelete(Sqlist *L,int n,ElemType *e)
{
int i;
if(L->len==0)
return 0;
for(i=n-1;i<=MAXSIZE-1;i++)
{
if(i==MAXSIZE-1)
break;
L->data[i]=L->data[i+1];
}
L->len--;
return 1;
}
void ShowList(Sqlist L)
{
int i;
for(i=0; i<L.len; i++)
printf("%d\n",L.data[i]);
}
void main()
{
Sqlist L;
InitList(&L); ///这怎么就把结点初始化为链表了?
int i;
ElemType temp;
for(i=1; i<=5; i++)
{
if(!ListInsert(&L,i,i))
printf("no");
}
ShowList(L);
}
朋友,这里初始化的应该是顺序表,因为在定义结构时有顺序表长度这个关键属性,所以初始化顺序表即将其长度初始为零。
这里没有链表的事情,链表和顺序表两回事
线性表的存储结构分为顺序存储(顺序表)和链式存储(链表)