静态链表的基本操作

来源:互联网 发布:南京高新区网络问政 编辑:程序博客网 时间:2024/05/20 21:45

0、宏定义以及静态链表结点结构体

#include<stdio.h>#include<stdlib.h>#include<iostream>using namespace std;#define MAXSIZE 1000#define OK 0#define error 1 typedef int Status;typedef int ElemType;//静态链表结构体 typedef struct component{    ElemType data;//数据     int cur;      //游标(cursor) }component,StaticList[MAXSIZE];1、静态链表的初始化
Status  InitList(StaticList space){    int i;    for(i=0;i<MAXSIZE;i++)    space[i].cur=i+1;    space[MAXSIZE-1].cur=0;//逻辑上最后一个节点的游标是0     return OK;}

2、定位元素

//在静态链表中定位元素位序 //元素存在则返回元素的位序,不存在则返回0 Status LocateElem (StaticList S,ElemType e){    i=S[MAXSIZE-1].cur;    while(i&&S[i].data!=e)    i=S[i].cur;    return i;   } 

3、向备用链表中申请空间

//跳过一个空闲分量并获取它的下标,头游标获得下一个空闲分量的下标(头游标永远是下一个空闲分量的位置)//当游标指向下一个空闲位置时,先前头游标标出的位置已经可以使用 Status Malloc_SLL(StaticList space){    int i=space[0].cur;    if(i)//总会有一个时刻space[0].cur会为0     {        space[0].cur=space[i].cur;    }    return i;} 

4、获取静态链表中元素个数

int ListLength(StaticList L){    int k=MAXSIZE-1;    k=L[k].cur;    int i=0;    while(k!=0)    {       i++;       k=L[k].cur;    }    return i;} 

5、插入一个元素

Status ListInsert(StaticList L, int i,ElemType e){    int j,k,i;//待使用的整型变量      k=MAXSIZE-1;//最后一个元素的下标指向逻辑顺序上第一个有元素的结点的下标     if(i)(i<1||i>ListLenth(L)+1)    {        return error;    }     j=malloc(L);    if(j)    {         L[j].data=e;        for(i=1;i<1;i++)        {            k=L[k].cur;        }//循环结束后k的值即为插入位置前驱的下标         L[j].cur=L[k].cur;        L[k].cur=j;//实现在逻辑顺序上的插入        //注意:当n为1时会引起L[MAX-1]的游标发生变化        return OK;     }     return error;} 

6、删除一个元素

void free_SL(StaticList &L, int k) {    //将下标为k的空闲结点回收到备用链表     L[k].cur=L[0].cur;//保持备用链表的逻辑结构    L[0].cur=k;  }  Status delete_SL(StaticList &L,int n) {    int i,j,k;    if(n<1||n>ListLength(L)+1)    return error;    k=MAXSIZE-1;    for(i=0;i<n-1;i++)    k=L[k].cur;//循环结束后k的值为要删除元素逻辑上的前驱的下标    j=L[k].cur;//要回收的结点的下标    L[k].cur=L[j].cur;//先把要回收的结点跳过去    free_SL(L,j);    return OK;      }

7、遍历线性表

int visit(ElemType e); Status Taverse(StaticList L,int(*f)(ElemType e)){    int k=MAXSIZE-1;    k=L[k].cur;    while(k)    {      f(L[k].data);      k=L[k].cur;    }    return 0;}int visit(ElemType e){    printf("%d\n",e);    return 0;}
0 0
原创粉丝点击