| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 439 人关注过本帖, 1 人收藏
标题:·········
只看楼主 加入收藏
xdh0817
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:193
专家分:195
注 册:2011-10-20
结帖率:92.86%
收藏(1)
已结贴  问题点数:20 回复次数:6 
·········
#include<stdio.h>
#define MAXSIZE 100
typedef int elemtype;
typedef struct
{
  elemtype data;
  int cur;
}Slinklist[MAXSIZE];
void Initspace(Slinklist L)
{
     int i;
     for(i=0;i<MAXSIZE-1;i++)
     L[i].cur=i+1;
     L[MAXSIZE-1].cur=0;
}
int Malloc(Slinklist Space)
{
    int i=Space[0].cur;
    if(i) Space[0].cur=Space[i].cur;
     return i;
}
int Initlist(Slinklist L)
{
     int i;
     i=Malloc(L);
     L[i].cur=0;
    return i;
}
int Listlength(Slinklist L,int n)
{
  int i,j=0;
  i=L[n].cur;
  while(i)
  {
   j++;
   i=L[i].cur;   
  }   
 return j;
}
void Listinsert(Slinklist L,int ka,int i)
{
 int k=ka,n,d,j;
 if(i<1||i>Listlength(L,ka)+1) printf("error");
 else
 {
   j=Malloc(L);
   if(j)
   {
      scanf("%d",&L[j].data);
    for(n=1;n<i;n++)
        k=L[k].cur;
        d=L[k].cur;
        L[k].cur=j;
        L[j].cur=d;
   }
 }
}
void Listdelete(Slinklist L,int ka,int i)
{
  int j,k,n;
  k=ka;j=0;
  if(i<1||i>Listlength(L,ka)) printf("error");
  else
  {
     while(j<i-1)
     {
      k=L[k].cur;   
      j++;
     }
     n=k;
     k=L[k].cur;
     L[n].cur=L[k].cur;
     L[k].cur=L[0].cur;
     L[0].cur=k;
  }
}
void Listmerge(Slinklist L,int La,int Lb)
{
    int lb,i,k;
    k=La;
    while(L[k].cur!=0)
    k=L[k].cur;
    lb=Lb;
    while(L[lb].cur!=0)
    {
    lb=L[lb].cur;
    i=Malloc(L);
    L[k].cur=i;
    L[i].data=L[lb].data;
    k=i;
    }
    L[i].cur=0;
}
void Listfree(Slinklist L,int ka)
{
 int k;
 k=ka;
 while(L[k].cur!=0)
  k=L[k].cur;
  L[k].cur=L[0].cur;
  L[0].cur=ka;
}
int main()
{
    Slinklist L;
    int La,i,j,m,la,k,p,t;
    Initspace(L);
    La=Initlist(L);
    scanf("%d",&k);
     la=La;
  for(i=0;i<k;i++)
  {
   m=Malloc(L);
   scanf("%d",&L[m].data);
   L[la].cur=m;
   la=m;        
  }
  L[la].cur=0;
scanf("%d",&m);
   for(i=0;i<m;i++)
  {
    scanf("%d",&t);
    p=La;
    k=L[La].cur;
    while(k!=0)
    {
    if(L[k].data!=t)
      {p=k;k=L[k].cur;}
      else break;
    }
    if(k==0)
    {
     j=Malloc(L);
     L[j].data=t;
     L[j].cur=L[la].cur;
     L[la].cur=j;   
     la=j;
    }
    else
       {
           L[p].cur=L[k].cur;
        if(la==k) la=p;
        }
    }
   la=L[La].cur;
     for(i=0;i<Listlength(L,La);i++)
    {
      printf("%d",L[la].data);
      la=L[la].cur;
      }
return 0;
}

[ 本帖最后由 xdh0817 于 2011-12-17 00:56 编辑 ]
2011-12-12 15:00
zy_space
Rank: 5Rank: 5
等 级:职业侠客
帖 子:163
专家分:364
注 册:2011-11-14
收藏
得分:5 
开头看了一下,后面没仔细看,觉得LZ两个地方可能有问题:

第一个,
typedef struct
{
int data;
int cur;
}SLinkList[MAXSIZE];
应该是typedef struct
{
int data;
int cur;
} SLinkList;
SLinkList   s[MAXSIZE];吧
typedef后面有两个参量,第一个是原变量名(在你的程序中应该是struct
{
int data;
int cur;
}),第二个参量是新声明的类型名称(这里应该是SLinkList)。然后才可以用新的变量名去创建数组(SLinkList   s[MAXSIZE];)。
这是第一个

第二个,

LZ在定义函数形参的时候(例如:void InitSpace_SL(SLinkList S))声明的明明是结构体变量类型,可是在函数内部确把这个变量当做指针/数组来使用。这样明显是不行的。解决办法是可以直接声明形参变量类型为数组类型(void InitSpace_SL(SLinkList S[]))或者是LZ有些地方那样(void Free_SL(SLinkList *S,int k)),声明形参为指针变量。


个人意见,数据结构我还没开始正式学习,只知道一点点,就无法对链表方面提出什么意见了

何必等待?梦在今朝
2011-12-12 17:54
编程的乐趣
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:229
专家分:1027
注 册:2011-4-4
收藏
得分:5 
.
2011-12-12 17:55
zy_space
Rank: 5Rank: 5
等 级:职业侠客
帖 子:163
专家分:364
注 册:2011-11-14
收藏
得分:0 
呃,我有什么地方搞错了吗LZ

何必等待?梦在今朝
2011-12-12 17:57
zy_space
Rank: 5Rank: 5
等 级:职业侠客
帖 子:163
专家分:364
注 册:2011-11-14
收藏
得分:0 
呃,我有什么地方搞错了吗LS

何必等待?梦在今朝
2011-12-12 17:57
xblv
Rank: 1
等 级:新手上路
帖 子:7
专家分:6
注 册:2011-12-12
收藏
得分:5 
lz用的应该是顺序表吧?话说我怎么连一个指针符号都没看到?
2011-12-13 11:11
xdh0817
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:193
专家分:195
注 册:2011-10-20
收藏
得分:0 
以下是引用xblv在2011-12-13 11:11:50的发言:

lz用的应该是顺序表吧?话说我怎么连一个指针符号都没看到?
你还年轻
2011-12-13 19:50
快速回复:·········
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024394 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved