首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

线性表顺序实现的有关问题

2012-02-14 
线性表顺序实现的问题#include stdio.h#include conio.h#include stdlib.h#defineLIST_INIT_SIZE100

线性表顺序实现的问题
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define   LIST_INIT_SIZE   100
#define   LISTINCREMENT   10
typedef   struct{
              int   *elem;
              int   length;
              int   listsize;
              }sqlist;
int   Initlist(sqlist   &L)//构造一个空的线性表  
{
        L.elem=(int   *)malloc(LIST_INIT_SIZE*sizeof(int));
        if(!L.elem)   printf( "malloc   wrong ");
        L.length=0;
        L.listsize=LIST_INIT_SIZE;
        for(int   i=0;i <L.listsize;i++){
                        L.elem[i]=i;
                        }
        return   0;
}
int   insert(sqlist   &L,int   x,int   i)//插入元素  
{     int   *q;
        if(i <1||i> L.length+1)   printf( "insert   wrong ");
        //当空间不足时候.重新申请  
      /*   if(L.length> =L.listsize){
                                                        newbase=(int   *)malloc(L.elem,
                                                          (L.listsize+LISTINCREMENT)*sizeof(int*));
          if(!newbase)   printf( "can   not   add ");
          L.elem=newbase;
          L.length   +=   LISTINCREMENT;
          }       */                  
        q   =   &(L.elem[i-1]);
        *q=x;
        ++L.length;
        return   0;
}
int   deletelist(sqlist   &L,int   &x,int   i)
{      
        int   *p,*q;
        if((i <1)||(i> L.length))printf( "delete   wrong ");
        p   =   &(L.elem[i-1]);
        x=*p;
        q=L.elem+L.length-1;
        for(++p;p <=q;++q)
        *(p-1)=*p;
        --L.length;
        return   0;
}
int   printlist(sqlist   &L)
{
        for(int   i=0;i <L.length;i++)
        printf( "%d ",L.elem[i]);
        return   0;
}
int   main()
{
        int   n=1,x,i;
        while(n){
        printf( "1--建立顺序表\n ");  
        printf( "2--插入顺序表\n ");


        printf( "3--删除顺序表\n ");
        printf( "4--打印顺序表\n ");
        printf( "请输入: ");
        scanf( "%d ",&n);
        switch(n){
        case   1:int   Initlist(sqlist   &L);
        break;
        case   2:printf( "请输入要插入的数 ");
                      scanf( "%d ",&x);
                      printf( "请输入要插入的位置 ");
                      scanf( "%d ",&i);
                  int   insert(sqlist   &L,int   x,int   i);
        break;
        case   3:printf( "请输入要删除的数的位置 ");
                      scanf( "%d ",&i);
                  int   deletelist(sqlist   &L,int   &x,int   i);
        case   4:int   printlist(sqlist   &L);
        break;
          return   0;
        }
}
getch();
}

问题一:   //当空间不足时候.重新申请  
      /*   if(L.length> =L.listsize){
                                                        newbase=(int   *)malloc(L.elem,
                                                          (L.listsize+LISTINCREMENT)*sizeof(int*));
          if(!newbase)   printf( "can   not   add ");
          L.elem=newbase;
          L.length   +=   LISTINCREMENT;
          }       */   出现编译错误;
问题二:线性表无法打印

请指教> > > > > > > > > > > > > >

  先谢谢拉

[解决办法]
malloc只有一个参数,就是申请的内存大小。lz你传了2个,所以编译错误。
线性表打印标准库里没有现成的函数,要自己写。遍历线性表,再逐个打印。
[解决办法]
把malloc函数改成realloc函数,
newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));///注意sizeof里面是int而不是int *,还有打印函数如楼上所说需要自己写,一个节点一个节点的遍历线性表,一个节点一个节点的打印

热点排行