首页 > 代码库 > 线性表之静态链表

线性表之静态链表

#include<iostream>#include <iomanip>#include"windows.h"using namespace std;struct StaticLinkNode{    int data;    int next;};struct StaticLink{    StaticLinkNode* nodes;    int maxCnt;    int cnt;};StaticLink createStaticLink(int max){    StaticLink p;    p.nodes=new StaticLinkNode[max+2];    for(int i=0;i<max;i++)        p.nodes[i].next=i+1;    p.nodes[max].next=0;    p.nodes[max+1].next=0;    p.maxCnt=max;    p.cnt=0;    return p;}int getSpare(StaticLink* p){    int first = (*p).nodes[0].next;    if(first!=0)        (*p).nodes[0].next = (*p).nodes[first].next;    return first;}void releaseToSpare(StaticLink* p,int i){    int first = (*p).nodes[0].next;    (*p).nodes[i].next=first;    (*p).nodes[0].next=i;}bool add(StaticLink* p,int i,int value){    int target =getSpare(p);    if(target==0)        return 0;    int first =(*p).maxCnt+1;    for(int j=0;j<i-1 && first;j++)        first = (*p).nodes[first].next;    if(first!=0)    {        (*p).nodes[target].data=http://www.mamicode.com/value;        (*p).nodes[target].next = (*p).nodes[first].next;        (*p).nodes[first].next=target;        (*p).cnt++;        return 1;    }    return 0;}bool remove(StaticLink* p,int i){    int first =(*p).maxCnt+1;    if(first==0)        return 0;    for(int j=0;j<i-1 && (*p).nodes[first].next;j++)        first = (*p).nodes[first].next;    if((*p).nodes[first].next)    {        int t=(*p).nodes[first].next ;        (*p).nodes[first].next = (*p).nodes[(*p).nodes[first].next].next;        releaseToSpare(p,t);        (*p).cnt--;        return 1;    }    return 0;}void output(StaticLink* p){    int first =(*p).nodes[(*p).maxCnt+1].next;    while(first!=0)    {        cout<<(*p).nodes[first].data<<" ";        first=(*p).nodes[first].next;    }    cout<<endl;}void main(){    int max=28;    StaticLink p= createStaticLink(28);    for(int i=0;i<15;i++)    {        int x = rand()%100;        cout<<x<<" ";        add(&p,p.cnt+1,x);    }    cout<<endl;    output(&p);    add(&p,2,45);    output(&p);    add(&p,1,55);    output(&p);    add(&p,p.cnt,65);    output(&p);    add(&p,p.cnt+1,75);    output(&p);    remove(&p,2);    output(&p);    remove(&p,1);    output(&p);    remove(&p,p.cnt);    output(&p);    remove(&p,p.cnt+1);    output(&p);    cin>>max;}

 

线性表之静态链表