回 帖 发 新 帖 刷新版面

主题:[讨论]C语言:线性表问题

初学者,线性表习题,程序编出来了,漏洞百出,更关键的是自己找不到,卡在这2天了,有高手又有空的话能不能帮忙详细分析讲解一下我的代码……感激不尽

#include<stdio.h>
#include<stdlib.h>
struct List{  int *data;
          int s;
          int e;
       };
void initList(struct List *L,int s1)
{     if(s1>0){
       L->s=s1;
       L->e=0;
       L->data=(int*)malloc(sizeof((int*)L->s));
      }
}
void FreeList(struct List *L){free(L->data);}
Bool ListEmpty(struct List *L){return((L->e<=0)?TRUE:FALSE);}
Bool ListFull(struct List *L){return((L->e==L->s)?TRUE:FALSE);}
int searchElem(struct List *L,int data)
{
     int i;
     for(i=0;i<L->e;i++)
      if(L->data[i]==data)return i;
     return -1;
}
Bool InsertElem(struct List *L,int data,int i)
{
     int j;
     if(i<0||i>L->e-1||L-e==L->s)return FALSE;
     else
     {
      for(j=L->e-1;j>=i;j--)
           L->data[j+1]=L->data[i];
      L->data[i]=data;
      L->e++;
      return TRUE;
     }
Bool DeleteElem(struct List *L,int i)
{
     int j;
     if(i<0||i>L->e||L->e==0)return FALSE;
     else
     {
      for(j=i;i<L->e;i++)
           L-data[j]=L->data[j+1];
      L->e--;
      return TRUE;
     }
void printout(struct List *L)
{
     int i;
     for(i=0;i<L->e;i++)
      printf("%d",L-data[i]);
     printf("\n");
}
void main()
{    struct List *L;
     InitList(L,5);
     FreeList(L);
     printf("The List is empty: ");
     printf(ListEmpty(L));
     printf("\n");
     printf("The List is full:  ");
     printf(ListFull(L));
     printf("\n");
     InsertElem(L,5,0);
     InsertElem(L,4,0);
     InsertElem(L,3,0);
     InsertElem(L,2,0);
     InsertElem(L,1,0);
     printf("The List:\n");
     printout(L);
     printf("The test of search:\n");
     printf("The index of element(3) is %d\n",searchElem(L,3));
     printf("The index of element(5) is %d\n",searchElem(L,5));
     printf("The test of delete:\n");
     DeleteElem(L,0);
     printf("Delete the elment of index(0),the list is:\n");
     printout(L);
     DeleteElem(L,1);
     printf("Delete the elment of index(1),the list is:\n");
     printout(L);
}


回复列表 (共4个回复)

沙发

期望输出什么?
实际输出什么?
自己感觉是哪儿的问题,又或是有何疑惑?

板凳

线性表的初始化,插入,查找和删除,编译不过,提示有错,自己找不到……

3 楼

提示哪行有错就改哪行啊:)

4 楼

先要搞清楚线性表是做什么用的!线性表是用来管理定长数据用的!那就和使用数组一样了,既然和数组一样那为什么还要来个线性表,那是因为数组是管理定长的基本类型的方法,而线性表能管理自定义类型的数据!
define N 10
typedef int  EmlemenType;
typedef struct list
{
   ElemenType  *data;
   int  len;
   int  max;
}list;
通过对list来控制对数据的操作。ElmemeType这个数据可以是自定义类型数据也可以是基本类型数据!
初始化的时候
list * InintList(n)
{
    list *lp=NULL;
    lp=(list *)malloc(sizeof(list));/*先申请list结构体的空间;*/
    if(!lp)
      return lp;
    list->data=(ElemenType *)malloc(sizeof(ElemenType)*n);/*申请要管理的数据的空间*/
    if(!list->data)
    {
         free(lp);
         return lp=NULL;
     }
    list->len=0;
    list->max=n;
    return lp; /*返回一个list指针*/
}
初始化就算是完成了。返回一个list的指针,在主函数里申请个list指针来接收就行了!

而插入的话
   int InsertElem(struct List *L,ElemenType* data,int n)/*假如数据是结构体的话不可能全压进去,所以传地址*/
{
     int i;
     if( n < 0 || n > L->max || L->len == L->max)return 0;
     else
     {
      for(i=L->max;i>=n;i--)
         memcpy(L->data[i],L->data[i-1],sizeof(ElemenType));/*用memcpy函数,是因为当数据是结构体的时候,直接data[i]=data[i-1];是行不通的!*/
      mencpy(L->data[n-1],data,sizeof(ElemenType));
      L->len++;
      return 1;
     }
}
插入搞明白了,其它的都大同小异。无非是尾部添加,删除。
在使用的时候也就是在main函数里应该是这样
int main()
{
   .............
   list *pl=InitList(N);
   if(!pl)
   {
        return 0;
   }

   .............
}
希望对LZ有帮助!

我来回复

您尚未登录,请登录后再回复。点此登录或注册