(源代码见大话数据结构)线性表—静态链表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(源代码见大话数据结构)线性表—静态链表相关的知识,希望对你有一定的参考价值。
#include <stdio.h> #include <stdlib.h> #include <time.h> #define MAXSIZE 1000 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALS 0 typedef int ElemType; typedef int Status; typedef struct { ElemType data; int cur; } Component,StaticLinkList[MAXSIZE]; Status InitList(StaticLinkList space); int Malloc_Sll(StaticLinkList space); Status ListLength(StaticLinkList space); Status ListInsert(StaticLinkList L,int i,ElemType e); int main() { StaticLinkList l; int i; InitList(l); ListInsert(l,1,1314); ListInsert(l,1,5778); ListInsert(l,1,890890); i=l[MAXSIZE-1].cur; printf("%d\n",ListLength(l)); while(i) { printf("%d\n",l[i].data); i=l[i].cur; } return 0; } Status InitList(StaticLinkList space) { int i; for(i=0;i<MAXSIZE-1;i++) { space[i].cur=i+1; } space[MAXSIZE-1].cur=0; return OK; } int Malloc_Sll(StaticLinkList space) { int i; i=space[0].cur; if(i) { space[0].cur=space[i].cur;//因为没使用的分量组成一个备用链表? } return i; } Status ListLength(StaticLinkList L) { int k=L[MAXSIZE-1].cur,length=0; while(k) { k=L[k].cur; length++; } return length; } Status ListInsert(StaticLinkList L,int i,ElemType e) { int j,k,l; k=MAXSIZE-1; if(i<1||i>ListLength(L)+1) return ERROR; j=Malloc_Sll(L); if(j) { L[j].data=e; for(l=1;l<i;l++) { k=L[k].cur; } L[j].cur=L[k].cur; L[k].cur=j; return OK; } return ERROR; }
实战中的BUG:
1.静态链表的插入ListInsert(StaticLinkList L,int i,ElemType e),i是第i个元素,静态链表中第一个元素(即下标为零的元素)相当于单链表的头结点作用,LitsLength(L)是算的静态链表中数据元素的个数。数据元素与元素不同,元素是指数组中的元素,数据元素是数组中被使用的分量。因为没搞清这两个概念,把插入函数中的if()搞错了。/(ㄒoㄒ)/~~
2.静态链表中数据元素的个数LitsLength(L),同样因为搞混了概念,把数组中第一个元素也算了进去。。
以上是关于(源代码见大话数据结构)线性表—静态链表的主要内容,如果未能解决你的问题,请参考以下文章