郁闷的静态链表

静态链表----解决不了
2009-06-18 22:19
这个不知道哪里出错了,,哎郁闷啊,,实在弄不出来,,,没有时间了,明天两门考试呢。。。。。。。

悲哀。。。。。。。。。。。。。

无聊的电气专业

高手帮忙改改吧!!!

#include "stdio.h"
#include "stdlib.h"
#define MAX_SIZE 100
/////////////////////////////////////////////////
//定义顶台链表结构
/////////////////////////////////////////////////
typedef struct
{
int data;
int cur;
}StaicList;


//////////////////////////////////////////////////
//初始化一个静态链表,实际上是备用链表
//////////////////////////////////////////////////
StaicList* InitList_sl()
{

    StaicList *s1=new StaicList[MAX_SIZE];
for (int i=0;i<MAX_SIZE-1;++i)
{
  s1.cur=i+1;
 
 
}

s1[MAX_SIZE-1].cur=0;
return s1;


}

////////////////////////////////////////////////////
//给链表非配空间
////////////////////////////////////////////////////
int MallocList_sl(StaicList* s2)
{
//StaicList *s2=new StaicList[MAX_SIZE];
/*非空就返回下标*/
int i=s2[0].cur;
if (s2[0].cur)
{
  s2[0].cur=s2.cur;
}

return i;
}

//////////////////////////////////////////////////////
//释放链表
//////////////////////////////////////////////////////
void FreeList_sl(StaicList* s3,int k)
{
//StaicList *s3=new StaicList[MAX_SIZE];
/*将下标为k的元素回收到备用链表中*/
s3[k].cur=s3[0].cur;
s3[0].cur=k;

}
//////////////////////////////////////////////////////
//比较函数
//////////////////////////////////////////////////////
StaicList* DeffList_sl()
{
    //StaicList *s4=new StaicList[MAX_SIZE];

StaicList* g=InitList_sl();    //初始化备用空间
int s=MallocList_sl(g);              //生成头结点
int r=s;                          //r指向当前最后的一个结点
int a,b;
printf("请输入A和B的元素个数:\n");
scanf("%d,%d",&a,&b);

for (int j=0;j<=a;++j)
{
  int i=MallocList_sl(g);
 
  printf("请输入A的元素:\n");
  scanf("%d",&g->data);
  g[r].cur=i;                  //插入到了当前备用链表的最后
  r=i;
  i++;//更新尾结点

}

g[r].cur=0;                      //尾结点为空
    int b1;
for (j=0;j<=b;++j)
{
  printf("请输入B的元素:\n");
  scanf("%d",&b1);
  int p=s;
  int k=g[s].cur;

        //循环查表//
  while (k!=g[0].cur&&g[k].data!=b1)
  {
    p=k;
    k=g[k].cur;
  }

  if (k==g[r].cur)
  {
    //如果不存在这个元素那么就插入到后面//
    int i=MallocList_sl(g);

    g.data=b;
    g.cur=g[r].cur;
    g[r].cur=i;

  }
  else
  {
    //如果存在就删除//
    g[p].cur=g[k].cur;
    FreeList_sl(g,k);
         
    //如果删除的刚好是为结点,那么就的更新下为结点//
    if (r==k)
    r=p;
 
  }

}
return g;
}

////////////////////////////////////////////////////////
//获取链表的长度
////////////////////////////////////////////////////////
int GetListLength(StaicList* ss)
{
    //StaicList *sl=new StaicList[MAX_SIZE];
int cnt=1;
int k=0;

while(ss[k].cur!=NULL)
{
  k=ss[k].cur;
  cnt++;
}
return cnt;
}



int main()
{


StaicList* g1=DeffList_sl();
if (!g1)
{
  printf("操作失败");
  exit(0);
}
else
{
  int n=GetListLength(g1);
  for (int i=0;i<=n;i++)
  {
    printf("%d---->\n",g1.data);
  }
}

return 0;

}



用户系统信息:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 551; .NET CLR 2.0.50727)