| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 11319 人关注过本帖
标题:ListLength函数和GetElem函数怎么编写,LocateElem_Sq函数中int (*compare) ...
取消只看楼主 加入收藏
Nield
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-4-23
结帖率:0
收藏
已结贴  问题点数:10 回复次数:0 
ListLength函数和GetElem函数怎么编写,LocateElem_Sq函数中int (*compare)(int, int)什么意思啊???
#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef struct
{
    int *elem;
    int length;
    int listsize;
}SqList;
int InitList_Sq(SqList &L)
{  // 算法2.3
  // 构造一个空的线性表L。
  L.elem = (int *)malloc(LIST_INIT_SIZE*sizeof(int));
  if (!L.elem) return ERROR;        // 存储分配失败
  L.length = 0;                  // 空表长度为0
  L.listsize = LIST_INIT_SIZE;   // 初始存储容量
  return OK;
} // InitList_Sq
int ListInsert_Sq(SqList &L, int i, int e)
{  // 算法2.4
  // 在顺序线性表L的第i个元素之前插入新的元素e,
  // i的合法值为1≤i≤ListLength_Sq(L)+1
    int *p,*q;
    if (i < 1 || i > L.length+1) return ERROR;  // i值不合法
    if (L.length >= L.listsize)
    {   // 当前存储空间已满,增加容量
        int *newbase = (int *)realloc(L.elem,
                  (L.listsize+LISTINCREMENT)*sizeof (int));
        if (!newbase) return ERROR;   // 存储分配失败
        L.elem = newbase;             // 新基址
        L.listsize += LISTINCREMENT;  // 增加存储容量
    }
    q = &(L.elem[i-1]);   // q为插入位置
    for (p = &(L.elem[L.length-1]); p>=q; --p)
    {
        *(p+1) = *p;
    }                                  // 插入位置及之后的元素右移
    *q = e;       // 插入e
    ++L.length;   // 表长增1
    return OK;
} // ListInsert_Sq
int LocateElem_Sq(SqList L, int e,int (*compare)(int, int))
{  // 算法2.6
  // 在顺序线性表L中查找第1个值与e满足compare()的元素的位序。
  // 若找到,则返回其在L中的位序,否则返回0。
    int i,*p;
    i = 1;        // i的初值为第1个元素的位序
    p = L.elem;   // p的初值为第1个元素的存储位置
    while (i <= L.length && !(*compare)(*p++, e))
    {
        ++i;
    }
    if (i <= L.length) return i;
    else return 0;
} // LocateElem_Sq
void Union(SqList &La, SqList Lb)
{  // 算法2.1
  // 将所有在线性表Lb中但不在La中的数据元素插入到La中
  int i,e;
  La.length = ListLength(La);          // 求线性表的长度  
  Lb.length = ListLength(Lb);
  for (i=1; i<=Lb.length; i++)
  {
    GetElem(Lb, i, e);              // 取Lb中第i个数据元素赋给e
    if (!LocateElem_Sq(La, e, equal))
    {// La中不存在和e相同的数据元素
      ListInsert_Sq(La, ++La_len, e);
    }// 插入
  }
} // union

void main()
{
    int a,b;
    SqList La,Lb;
    a=InitList_Sq(&La);
    b=InitList_Sq(&Lb);
    printf("请输入线性表La:");
    for(i=0;i<LIST_INIT_SIZE;i++)
        scanf("%d",&La.elem+i);
    printf("请输入线性表Lb:");
    for(i=0;i<LIST_INIT_SIZE;i++)
        scanf("%d",&Lb.elem+i);
    Union(&La,Lb);
}
搜索更多相关主题的帖子: compare 存储 include return 
2013-04-24 10:05
快速回复:ListLength函数和GetElem函数怎么编写,LocateElem_Sq函数中int (*com ...
数据加载中...
 
   



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

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