静态链表的实现

#include<stdio.h>
#include<stdlib.h>      
#define SIZE 6      
//define struct of static list      
typedef struct stlist      
{      
    int* content;//保存当前节点的内容      
    int* next;    //保存下一节点的下标      
    int* exist;   //标记当前节点是否已经使用过      
} StList;      
//初始化静态链表分配空间大小为SIZE个      
StList* initList(StList* tempPtr)      
{      
    int i;      
    //allocation space      
    tempPtr=(StList*)malloc(sizeof(StList));      
    tempPtr->content=(int*)malloc(sizeof(int)*SIZE);      
    tempPtr->next=(int*)malloc(sizeof(int)*SIZE);      
    tempPtr->exist=(int*)malloc(sizeof(int)*SIZE);      
    for(i=0;i<6;i++)      
    {      
        tempPtr->exist[i]=0;      
        tempPtr->next[i]=0;      
        tempPtr->content[i]=0;      
    }//Of for i      
    //initialize head and tail      
    tempPtr->content[0]=-65535;      
    tempPtr->exist[0]=1;      
    tempPtr->content[1]=65535;      
    tempPtr->exist[1]=1;      
    tempPtr->next[0]=1;      
    tempPtr->next[1]=-1;      
    return tempPtr;      
}//Of initList      
      
//打印静态链表      
void print(StList* tempPtr)      
{      
    int temp=0;      
    int i;      
       //按照数组下标遍历静态链表      
    for(i=0;i<SIZE;i++)      
    {      
        printf("%d\t%d\t%d\t\n",tempPtr->content[i],tempPtr->next[i],tempPtr->exist[i]);      
    }//Of for i      
//按照节点顺序遍历静态链表      
    printf("遍历:\n");      
    while(1)      
    {      
        printf("%d\t%d\t%d\t\n",tempPtr->content[temp],tempPtr->next[temp],tempPtr->exist[temp]);      
        if(tempPtr->next[temp]==-1)      
        {      
            break;      
        }//Of if      
        temp=tempPtr->next[temp];      
    }//Of while      
}//Of print      
      
//把元素插入到静态链表当中      
int insert(StList* tempPtr,int newElement)      
{      
    int i;      
    int temp=0;      
    int insertIndex=-1;      
    int p,q;      
    p=0;      
    q=tempPtr->next[p];      
//如果静态链表中存在元素 则不插入      
    for(i=0;i<SIZE;i++)      
    {      
        //if have the element then end      
        if(tempPtr->content[i]==newElement)      
        {      
            return -1;      
        }//Of if      
    }//Of for i      
    for(i=0;i<SIZE;i++)<span style="font-family: Arial, Helvetica, sans-serif;">//把元素插入到静态链表中</span>      
    {      
        //find spare space      
        if(tempPtr->exist[i]==0)      
        {      
            tempPtr->content[i]=newElement;      
            tempPtr->exist[i]=1;      
            insertIndex=i;      
            break;      
        }//Of if      
    }//Of for i      
    if(insertIndex==-1)      
    {      
        printf("no more space.Overflow.\n");      
        return -1;      
    }//Of if      
    for(i=0;i<SIZE-1;i++)//找到要插入元素的前驱和后驱      
    {      
        //if find index then insert else continue finding      
        if(tempPtr->content[p]<newElement&&tempPtr->content[q]>newElement)      
        {      
            tempPtr->next[p]=insertIndex;      
            tempPtr->next[insertIndex]=q;      
            break;      
        }//of if      
        else      
        {      
            p=q;      
            q=tempPtr->next[q];      
        }//Of else      
    }      
    return 1;      
}      
      
int main()      
{      
    StList* list;      
    list=initList(list);      
//  insert(list,3);      
//  insert(list,7);      
//  insert(list,5);      
//  insert(list,9);      
    insert(list,8);      
    insert(list,8);      
    printf("content\tnext\texist\n");      
    print(list);      
    return 0;      
}//Of main   







                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值