解题思路:和链表的插入删除差不多,主要是静态连表是有界的,分配11个内存就只有11个
注意事项:
参考代码:#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
#define N 11
typedef char ElemType[8];
typedef struct
{
ElemType data;
int cur;
}NodeType;
//查找函数
void Search(ElemType e,NodeType *space)//修改
{
if(space[1].cur!=0)
{
int i;
i=space[1].cur;
while(i&&strcmp(space[i].data,e))
{
i=space[i].cur;
}
if(i!=0)
{
printf("%2d\n",i);
printf("********************\n");
}
}
}
//全部展示函数
void Show(NodeType *space)
{
for(int j=0;j<11;j++)
{
printf("%-8s%2d\n",space[j].data,space[j].cur);
}
printf("********************\n");
}
//插入函数
void Insert(NodeType *space,ElemType e,int a,int q)//这里只需要用到头结点,不需要第一个元素的下标 等一下看看从第一个前插入是司马效果
{
if(a<q+2)
{ int t=0;
int k=1;
for(int i=0;i<a-1;i++)
{
k=space[k].cur;
}
t=space[0].cur;
strcpy(space[t].data,e);
space[0].cur=space[t].cur;
space[t].cur=space[k].cur;
space[k].cur=t;
}
}
//删除函数
void Delete(NodeType *space,int a,int q)
{
if(a<q+1)
{
int k=1;
int t;
for(int j=0;j<a-1;j++)
{
k=space[k].cur;
}
t=space[k].cur;
space[k].cur=space[t].cur;
//释放空间
space[t].cur=space[0].cur;
space[0].cur=t;
}
}
int main()
{
char *str1="insert";
char *str2="delete";
char *str3="search";
char *str4="show";
NodeType space[N];
int q=0;
memset(space,0,sizeof(space));
for(int i=0;i<N-1;i++)
{
space[i].cur=i+1;
}
space[N-1].cur=0;
//建一个头结点
space[0].cur=2;
space[1].cur=0;
char str[10];
ElemType e;
int a;
while(scanf("%s",str)!=EOF)
{
if(strcmp(str,str1)==0)
{ scanf("%d%s",&a,e);
Insert(space,e,a,q);
if(a<q+2)
q=q+1;
}
if(strcmp(str,str2)==0)
{ scanf("%d",&a);
Delete(space,a,q);
if(a<q+1)
q=q-1;
}
if(strcmp(str,str3)==0)
{ scanf("%s",e);
Search(e,space);
}
if(strcmp(str,str4)==0)
{
Show(space);
}
}
}
0.0分
1 人评分