静态链表的表示和实现

上传源码,学习交流,有什么需要改进的地方还希望各位给予指点。

参考书目:《数据结构(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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值