上传源码,学习交流,有什么需要改进的地方还希望各位给予指点。
参考书目:《数据结构(C语言版)》,严蔚敏
common.h
#ifndef _COMMON_H_
#define _COMMON_H_
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
Status Equal(int a, int b);
#endif
StaList.h
#ifndef _STALIST_H_
#define _STALIST_H_
#define MAXSIZE 100
#define ElemType int
typedef struct
{
ElemType data;
int cur;
}SLinkList[MAXSIZE]; //component
void InitSpace_SL(SLinkList space);
int Malloc_SL(SLinkList space);
int LocateElem_SL(SLinkList S,ElemType e);
Status ListScanf_SL(SLinkList S);
Status ListDisp(SLinkList S);
#endif
StaList.c
#include "stdio.h"
#include "stdlib.h"
#include "common.h"
#include "StaList.h"
//注释参见课本
void InitSpace_SL(SLinkList space)
{
int i;
for(i=0;i<MAXSIZE-1;i++)
{
space[i].cur = i+1;
}
space[MAXSIZE-1].cur = 0;
}
//注释参见课本
int Malloc_SL(SLinkList space)
{
int i;
i = space[0].cur;
if(space[0].cur)
{space[0].cur = space[i].cur;}
return i;
}
//注释参见课本
int LocateElem_SL(SLinkList S,ElemType e)
{
int i;
i = S[0].cur;
while(i && S[i].data != e)
i = S[i].cur;
if(i==0)
return FALSE;
return i;
}
/*
输入参数:S 待显示链表的首地址
返回参数:返回本次输入的第一个元素在数组S中的下标,本打算再定义个形参,以便于执行时直接取得本次输入的第一个元素。
函数功能:从键盘输入数值到链表S,约定当输入0时结束,且将0存入链表
*/
int ListScanf_SL(SLinkList S)
{
int i=0,p,head;
i = Malloc_SL(S);
head = i;
p = i;
scanf("%d",&S[i].data);
while(S[i].data != 0)
{
i = Malloc_SL(S);
S[p].cur = i;
p = i;
scanf("%d",&S[i].data);
}
S[p].cur = 0; //一定要加上这条语句,因为在显示函数ListDisp()中会以此为判断依据输出链表。
return head;
}
/*
函数功能:显示链表
*/
Status ListDisp(SLinkList S)
{
int i;
i = S[MAXSIZE - 1].cur; //实际上给i直接赋值1不就行了嘛。
i++;
printf("\n\n\n************** output start **************\n");
while(i)
{
printf("%d ",S[i].data);
i = S[i].cur;
}
printf("\n************** output end **************\n");
return OK;
}
main.c
#include "stdio.h"
#include "stdlib.h"
#include "common.h"
#include "StaList.h"
int main(void)
{
SLinkList L;
InitSpace_SL(L);
ListScanf_SL(L);
ListDisp(L);
}