解题思路:和链表的插入删除差不多,主要是静态连表是有界的,分配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 人评分

  评论区

  • «
  • »