静态链表
#include <iostream>
#include <cstdlib>
using namespace std;
#define maxn 105
typedef struct
{
int data;
int cur;
}stackLinkList;
void init(stackLinkList *L)
{
for(int i=0;i<maxn-1;i++)
L[i].cur=i+1;
L[maxn-1].cur=0;
}
void input(stackLinkList *L)
{
int i=1;
int x;
cin>>x;
while(x!=-1)
{
L[i++].data=x;
cin>>x;
}
L[0].cur=i;
i--;
L[i].cur=0;
L[maxn-1].cur=1;
}
int malloc_SLL(stackLinkList *L)
{
int i=L[0].cur;
if(L[0].cur)
L[0].cur=L[i].cur;
return i;
}
void Free_SLL(stackLinkList *L,int k)
{
L[k].cur=L[0].cur;
L[0].cur=k;
}
void ListInsert(stackLinkList *L,int pos,int e)
{
int k=maxn-1;
int j=malloc_SLL(L);
if(pos<1||pos>L[0].cur)
return ;
if(j)
{
L[j].data=e;
for(int u=1;u<=pos-1;u++)
k=L[k].cur;
L[j].cur=L[k].cur;
L[k].cur=j;
}
}
void ListDelete(stackLinkList *L,int pos)
{
if(pos<1||pos>=L[0].cur)
return ;
int k=maxn-1;
for(int u=1;u<=pos-1;u++)
k=L[k].cur;
int j=L[k].cur;
L[k].cur=L[j].cur;
Free_SLL(L,j);
}
void print(stackLinkList *L)
{
int i=1;
while(i!=0)
{
cout << L[i].data << ' ';
i=L[i].cur;
}
cout << endl;
}
int main()
{
stackLinkList sl[maxn];
init(sl);
input(sl);
ListInsert(sl,3,999);
print(sl);
ListInsert(sl,3,999);
print(sl);
ListDelete(sl,3);
print(sl);
ListDelete(sl,3);
print(sl);
return 0;
}