标签:初始化 seq 结构 def pre 步骤 数学 描述 数据类型
---恢复内容开始---
推荐一本学习书籍:程杰的《大话数据结构》。
既然是数据结构,那什么是数据结构呢?这里补充一些基本术语和概念。
数据结构: 是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。
本篇学习线性表,线性表是什么?
头部定义(seq_header.h)
#include<stdio.h> #include<stdlib.h> #define maxsize 100 #define ok 1 #define error 0 #define true 1 #define false 0 typedef int status; typedef int elemType; typedef struct{ elemType data[maxsize]; int length;//current length of Sqlist }SqList;
线性表操作函数(seq_func.h)
/*输出指定数据*/ status visit(elemType e){ printf("%d ", e); return ok; } /*判断线性表是否为空*/ status listEmpty(SqList L){ if(L.length == 0) return true; else return false; } /*清除线性表*/ status clearList(SqList *L){ L->length = 0; return ok; } /*返回线性表数据元素个数*/ int listLength(SqList L){ return L.length; } /*初始条件: 顺序线性表L已存在,1 <= i <= listLength(L)*/ /*操作结果: 删除L的第i个数据元素,并用e返回其值,L得长度减1*/ status listDelete(SqList *L, int i, elemType *e){ int k; if(L->length == 0) return error; if(i < 1 || i>L->length) return error; *e=L->data[i-1]; if(i < L->length){ for(k = i; k<L->length; k++) L->data[k-1] = L->data[k]; } L->length--; return ok; } /** Status: if ok return OK(=1) Condition: SqList already exists, 1 <= i <= ListLength(SqList) Result: use e to return the index of i value in SqList */ status getElem(SqList L, int i, elemType *e){ if(L.length == 0 || i < 1 || i > L.length) return error; *e = L.data[i-1]; return ok; } /*初始化顺序线性表*/ status initList(SqList *L){ L->length = 0; return ok; } /*初始条件: 顺序线性表L已存在,1 <= i<= ListLength(L)*/ /*操作结果:在L中第i个位置之前插入新的数据元素e, L的长度加1*/ status listInsert(SqList *L, int i, elemType e){ int k; if(L->length == maxsize)/*顺序表已经满了*/ return error; if(i < 1 || i > L->length+1)/*插入的位置超过范围*/ return error; if(i <= L->length){/*插入的位置不在表尾*/ for(k = L->length - 1; k >= i-1; k--) L->data[k+1] = L->data[k]; } L->data[i-1] =e; L->length++; return ok; } /*初始条件:顺序线性表L已存在*/ /*操作结果:依次对L的每个数据元素输出*/ status listTrave(SqList L){ int i; for(i = 0; i<L.length; i++) visit(L.data[i]); printf("\n"); return ok; } /*初始条件: 顺序线性表L已存在*/ /*操作结果: 返回L中第1个与e满足关系的位序*/ /*若这样的数据元素不存在,则返回0*/ int locateElem(SqList L, elemType e){ int i; if(L.length == 0) return 0; for(i = 0; i < L.length; i++){ if(L.data[i] == e) break; } if(i >= L.length) return 0; return i+1; } /*将后一个线性表合并到前一个线性表上*/ void unionL(SqList *La, SqList Lb){ int La_len, Lb_len, i; elemType e; La_len = listLength(*La); Lb_len = listLength(Lb); for(i = 1; i<=Lb_len; i++){ getElem(Lb, i, &e); if(!locateElem(*La, e)) listInsert(La, ++La_len, e); } }
主函数测试(main.cpp)
#include "seq_header.h" #include "seq_func.h" int main(){ SqList L;//定义一个顺序线性表 elemType e; status i; int j, k; i = initList(&L);//初始化一个顺序线性表 printf("初始化后L:L.length = %d\n", L.length); for(j = 1; j <= 5; j++) i = listInsert(&L, j, j); printf("在L的表头依次插入1~5后: L.data = "); listTrave(L); printf("L.length = %d \n", L.length); i = listEmpty(L); printf("L是否为空:i=%d(1:是 0:否)\n", i); i = clearList(&L); printf("清空L后:L.length = %d\n", L.length); i = listEmpty(L); printf("L是否为空:i=%d(1:是 0:否)\n", i); for(j = 1; j <= 10; j++) listInsert(&L, 1, j); printf("在L的表尾依次插入1~10后:L.data="); listTrave(L); printf("L.length = %d \n", L.length); getElem(L, 5, &e); printf("第5个元素为:%d\n", e); for(j = 3; j <= 4; j++){ k = locateElem(L, j); if(k) printf("第%d个元素的值为%d\n", k, j); else printf("没有值为%d的元素\n",j); } j = 5; listDelete(&L, j ,&e); printf("删除第%d个元素值为:%d\n", j, e); printf("依次输出L的元素:"); listTrave(L); //构造一个有10个数的Lb SqList Lb; i = initList(&Lb); for(j=6; j<= 15; j++){ i = listInsert(&Lb, 1, j); } unionL(&L, Lb); printf("依次输出了合并了Lb的L的元素:"); listTrave(L); return 0; }
标签:初始化 seq 结构 def pre 步骤 数学 描述 数据类型
原文地址:https://www.cnblogs.com/ncgds/p/9062485.html