| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 374 人关注过本帖
标题:顺序表问题解决不了
只看楼主 加入收藏
cwl168
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2012-12-14
结帖率:8.33%
收藏
已结贴  问题点数:5 回复次数:4 
顺序表问题解决不了
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define OK 1
#define ERROR
#define OVERFLOW
typedef struct SqList
{
    int * elem;
    int length;
    int listsize;
}SqList;
//顺序表的初始化
void IntiList(SqList *L)
{
      L->elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
      if(!L->elem) exit(0);
      L->length=0;
      L->listsize=LIST_INIT_SIZE;
      printf("InitList Success!\n");
}
//书序表的插入
void ListInsert(SqList *L,int i,int e)
{
      int *p,*q,*newbase;
      if(i<1||i>L->length+1)  
          exit(0);
      if(L->length>=L->listsize)
      {
           newbase=(int *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(int));
           if(!newbase) exit(0);
           L->elem=newbase;
           L->listsize+=LISTINCREMENT;
      }
      q=&(L->elem[i-1]);
      for(p=&(L->elem[L->length-1]);p>=q;--p)//元素往右移动
          *(p+1)=*q;
      *q=e;
      ++L->length;
      printf("ListInsert Success!\n");
}
//顺序表的遍历
void ListTravese(SqList *L)
{
      for(int i=0;i<=L->length-1;i++)
          printf("%d ",L->elem[i]);
}
//顺序表的删除
void ListDelete(SqList *L,int i, int e)
{
     int *p,*q;
     if(i<1||(i>L->length+1)) exit(0);
     p=&(L->elem[i-1]);
     e=*p;
     q=&(L->elem[L->length-1]);//等价于q=L->elem+L->length-1
     for(++p;p<=q;++p)
         *(p-1)=*p;
     --L->length;

}
//顺序表的定位
int LocateElem_Sq(SqList *L,int e,int(*compare)(int,int))
{
    int i=1,*p;
    p=L->elem;
    while(i<=L->length && !(compare)(*p++,e))
        ++i;
    if(i<=L->length) return i;
    else return 0;
}
//顺序表的长度
int ListLength(SqList *L)
{
    return L->length;
}
//顺序表置为空表
int ClearList(SqList *L)
{
     L->length=0;
     return OK;
}
//顺序表的销毁
int DestroyList(SqList *L)
{
     free(L->elem);
     L->elem=NULL;
     L->length=0;
     L->listsize=0;
     return OK;
}
int main()
{  
    SqList L;
    IntiList(&L);
    ListInsert(&L,1,1);
    ListInsert(&L,2,2);
    ListInsert(&L,3,3);
    ListInsert(&L,4,4);
    ListInsert(&L,5,5);
    ListInsert(&L,6,6);
    ListInsert(&L,7,7);
    ListInsert(&L,8,8);
    ListTravese(&L);
    ListDelete(&L,2,2);
    ListLength(&L);
    printf("\n");
    ListTravese(&L);
  //  printf("the postion is:%d",LocateElem_Sq(&L,7,compare));
    return 0;
}
这段程序中这块什么意思int LocateElem_Sq(SqList *L,int e,int(*compare)(int,int))
{
    int i=1,*p;
    p=L->elem;
    while(i<=L->length && !(compare)(*p++,e))
        ++i;
    if(i<=L->length) return i;
    else return 0;
}
我知道其他的方法可以写,如果是这种方法定位,该怎么写啊
尤其是int(*compare)(int,int))

搜索更多相关主题的帖子: void include 
2012-12-26 21:16
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:2 
传递参数  只不过传递的是函数指针
2012-12-27 09:01
a151141
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:197
专家分:680
注 册:2012-10-19
收藏
得分:2 
compare()是个函数。具体要表示大于,小于,或其他关系,自己定义。

世界上幸福的事就是抓到一只羊,更幸福的事就是抓到两只羊……
2012-12-30 10:17
不玩虚的
Rank: 9Rank: 9Rank: 9
来 自:四川
等 级:贵宾
威 望:10
帖 子:331
专家分:1301
注 册:2012-12-9
收藏
得分:2 
顺序表指的是数组实现的楼主,链表用指针实现的。数组是没有办法实现元素的插入,删除。能删的也只是假删。链表可以。所以楼主的不是顺序表而是链表。

同学习......同进步....你帮我......我帮你.....上善若水.....
2013-01-02 14:50
不玩虚的
Rank: 9Rank: 9Rank: 9
来 自:四川
等 级:贵宾
威 望:10
帖 子:331
专家分:1301
注 册:2012-12-9
收藏
得分:0 
不相信请看数据结构的教材。

同学习......同进步....你帮我......我帮你.....上善若水.....
2013-01-02 14:52
快速回复:顺序表问题解决不了
数据加载中...
 
   



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

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