#include <stdio.h>
#include <stdlib.h>
int Free_SLL;///全局变量维护空闲队列队首指针,可以实现,但不合适。
/**< 静态链表 */
/**< 定义静态链表结点 */
typedef struct
{
int data;
int cur;
}SLLNode,*StLinkList;
/**< 初始化 */
StLinkList Init_SLL(int Max)
{
int i;
StLinkList SLL=malloc(Max*sizeof(SLLNode));
SLL[0].cur=0;
SLL[0].data=Max;
for(i=1;i<=Max;i++)
{
SLL[i].cur=(i+1)%Max;
SLL[i].data=0;
}
Free_SLL=1;/// 空闲队列队首
return SLL;
}
/**< 插入元素 */
void Insert_SLL(StLinkList SLL,int pos,int Val)
{
int i,Ite=0;
for(i=0;i<pos-1;i++)
{
Ite=SLL[Ite].cur;
}
int Buf_SLL=Free_SLL;///缓冲变量
SLL[Free_SLL].data=Val;
Free_SLL=SLL[Free_SLL].cur;
SLL[Buf_SLL].cur=SLL[Ite].cur;
///printf("%d",SLL[Ite].cur);
SLL[Ite].cur=Buf_SLL;
}
/**< 删除元素 */
int Delete_SLL(StLinkList SLL,int pos)
{
int i,Ite=0;
for(i=0;i<pos-1;i++)
{
Ite=SLL[Ite].cur;
}
int Buf_SLL=SLL[Ite].cur;///缓冲变量
int Val=SLL[Buf_SLL].data;
SLL[Ite].cur=SLL[SLL[Ite].cur].cur;
SLL[Buf_SLL].cur=Free_SLL;
Free_SLL=Buf_SLL;
return Val;
}
/**< 打印静态表 */
void Printf_SLL(StLinkList SLL)
{
int Ite=0,i=1;
while(SLL[Ite].cur!=0)
{
Ite=SLL[Ite].cur;
printf("SLL[%d]=%d\tcur=%d\n",i,SLL[Ite].data,SLL[Ite].cur);
i++;
}
}
int main()
{
StLinkList SLL=Init_SLL(100);
Insert_SLL(SLL,1,20);
Insert_SLL(SLL,1,23);
Insert_SLL(SLL,2,7);
Insert_SLL(SLL,2,81);
printf("SLL[0]=%d\tcur=%d\n",SLL[0].data,SLL[0].cur);
Printf_SLL(SLL);
int n=Delete_SLL(SLL,2);
printf("%d",n);
Printf_SLL(SLL);
Delete_SLL(SLL,2);
Printf_SLL(SLL);
printf("Hello world!\n");
return 0;
}
数据结构-静态链表ADT(C语言)2018.3.13
最新推荐文章于 2020-02-26 10:18:02 发布