博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
向量的基本运算
阅读量:6502 次
发布时间:2019-06-24

本文共 4361 字,大约阅读时间需要 14 分钟。

vector.h

#ifndef vector_h__#define vector_h__# include 
# include
enum boolean {FALSE, TRUE};typedef enum boolean BOOL;typedef int ElementType;typedef struct vector_def{ ElementType* elements; int ArraySize; int VectorLength;}Vector;/*共九个函数*/void GetArray(Vector* V);void InitVector(Vector *V,int sz);ElementType* GetNode(Vector *V, int i);void FreeVector(Vector * V);int Find(Vector * V, ElementType x);BOOL insert (Vector * V, ElementType x, int i);BOOL Remove(Vector * V,int i);Vector* Union(Vector * Va, Vector* Vb);Vector* Intersection(Vector* Va, Vector *Vb);#endif // vector_h__

vector.c

# include "vector.h"void GetArray(Vector* V){    /* 数组获取内存空间*/    V->elements = (ElementType *) malloc(sizeof(ElementType)* V->ArraySize);    if (V->elements == NULL)        printf("Mempry Allocation Error!\n");}void InitVector(Vector *V,int sz){    /*初始化函数, 建立一个最大长度为sz的数组*/    if (sz > 0){        V->ArraySize = sz;        V->VectorLength = 0;        GetArray(V);    }    else{        printf("Invalid Array Size.\n");    }}ElementType* GetNode(Vector *V, int i){    /*取向量中第i个结点的值。     若第 i 个结点存在,则返回该结点的值。    否则返回NULL    */    return (i<0 || i>=V->VectorLength)? NULL: V->elements+i;}void FreeVector(Vector * V){    /*    释放向量的内存空间    */    free(V->elements);}int Find(Vector * V, ElementType x){    /*        查找值为x的结点。若找到,则返回站点序号,否则返加-1。    */    int i;    for (i=0; i
VectorLength; i++){ if (V->elements[i] == x) return i; } return -1;}BOOL insert (Vector * V, ElementType x, int i){ /*在向量第 i 个位置插入值为x 的新结点。若插入成功,则返回TRUE;否则返回FALSE*/ int j; if (V->VectorLength == V->ArraySize){ printf("overflow\n"); return FALSE; } else if (i<0 || i>V->VectorLength){ printf("Position error\n"); return FALSE; } else{ // 此处length -1 , 因为有一个时,length == 1 for (j=V->VectorLength-1; j>=i; j--) V->elements[j+1] = V->elements[j]; V->elements[i] = x; V->VectorLength++; } return TRUE;}BOOL Remove(Vector * V,int i){ /*删除第 i 个结点。成功返回TRUE;否则返回FALSE;*/ int j; if (V->VectorLength == 0){ printf("Vector is empty.\n"); return FALSE; } else if (i<0 || i>V->VectorLength-1){ printf("Position Error."); return FALSE; } else{ for (j=i; j
VectorLength-1; j++) V->elements[j] = V->elements[j+1]; V->VectorLength--; } return TRUE;}Vector* Union(Vector * Va, Vector* Vb){ /*把向量Va Vb 合并到 Vc 中, 重复元素只留一个*/ int m, n, i, k, j; ElementType x; Vector *Vc = (Vector * )malloc(sizeof(Vector)); n = Va->VectorLength; m = Vb->VectorLength; InitVector(Vc, m+n); j = 0; for (i=0; i
VectorLength; m = Vb->VectorLength; InitVector(Vc, (m>n)?n:m); i=0; j = 0; while (i

main.c

#include "vector.h"#define M 6/*    void GetArray(Vector* V);    void InitVector(Vector *V,int sz);    ElementType* GetNode(Vector *V, int i);    void FreeVector(Vector * V);    int Find(Vector * V, ElementType x);    BOOL insert (Vector * V, ElementType x, int i);    BOOL Remove(Vector * V,int i);    Vector* Union(Vector * Va, Vector* Vb);    Vector* Intersection(Vector* Va, Vector *Vb)*/void printout(Vector * V){    int i;    for (i=0; i
VectorLength; i++) printf("%d ", V->elements[i]); printf("\n");}int main(){ Vector* Va = (Vector*)malloc(sizeof(Vector)); Vector* Vb = (Vector*)malloc(sizeof(Vector)); Vector* Vc = (Vector*)malloc(sizeof(Vector)); puts("初始化,,,,"); InitVector(Va, M); puts("依次插入元素"); insert(Va, 10, 0); insert(Va, 20, 1); insert(Va, 30, 2); insert(Va, 40, 3); insert(Va, 50, 4); insert(Va, 80, 2); printf("Va:"); printout(Va); Remove(Va, 2); printf("Va:"); printout(Va); puts("初始化,,,,"); InitVector(Vb, M); puts("依次插入元素"); insert(Vb, 10, 0); insert(Vb, 12, 1); insert(Vb, 13, 2); insert(Vb, 40, 3); insert(Vb, 50, 4); insert(Vb, 18, 2); printf("Vb:"); printout(Vb); printf("\n交并集操作\n\n"); Vc = Union(Va, Vb); printf("Union:\n"); printout(Vc); Vc = Intersection(Va, Vb); printf("Intersection:\n"); printout(Vc); FreeVector(Va); FreeVector(Vb); FreeVector(Vc); return 0;}

运行结果:

VS2010

转载于:https://www.cnblogs.com/laohaozi/p/8266625.html

你可能感兴趣的文章
Visual Studio 11 Beta新特性(一):安装VS11
查看>>
通信常用概念
查看>>
PreferenceFragment 使用 小结
查看>>
FreeBinary 格式说明
查看>>
oracle相关链接
查看>>
有关奇葩的mex编程时的matlab出现栈内存错误的问题
查看>>
使用Spring Cloud和Docker构建微服务
查看>>
常用链接
查看>>
NB-IoT的成功商用不是一蹴而就
查看>>
九州云实战人员为您揭秘成功部署OpenStack几大要点
查看>>
1.电子商务支付方式有哪些 2.比较不同支付方式的优势劣势
查看>>
医疗卫生系统被爆漏洞,7亿公民信息泄露……
查看>>
神秘函件引发的4G+与全网通的较量
查看>>
CloudCC:智能CRM究竟能否成为下一个行业风口?
查看>>
高德开放平台推出LBS游戏行业解决方案提供专业地图平台能力支持
查看>>
追求绿色数据中心
查看>>
Web开发初学指南
查看>>
OpenStack Days China:华云数据CTO郑军分享OpenStack创新实践
查看>>
探寻光存储没落的真正原因
查看>>
高通64位ARMv8系列服务器芯片商标命名:Centriq
查看>>