考研数据结构复习之线性表
2017-08-26 14:42
246 查看
线性表之顺序表学习
测试main:
#pragma once #define MaxListSize 100 typedef int DataType; class SeqListTest { public: SeqListTest(); ~SeqListTest(); }; typedef struct { DataType list[MaxListSize]; int length; }SeqList; void InitList(SeqList *L); bool ListEmpty(SeqList L); int GetElemByNum(SeqList L, int i, DataType *e); int GetLocateElem(SeqList L, DataType e); int InsertList(SeqList *L, int i, DataType e); int DeleteList(SeqList *L, int i, DataType *e); int ListLength(SeqList L); void ClearList(SeqList *L); void PrintList(SeqList *L);
#include "SeqListTest.h" #include<iostream> using namespace std; SeqListTest::SeqListTest() { } SeqListTest::~SeqListTest() { } /*线性表初始化正确方法*/ void InitList(SeqList * L) { L->length = 0; } /*线性表初始化错误方法 void InitList(SeqList L) { L.length = 0; }*/ /*这里的错误是因为初始化的时候需要注意到L的本身需要改变,可以使用指针,或者是引用类型.引用类型的代码如下: void InitList(SeqList &L) { L.length = 0; } 只需记住:不需要修改表L本身的时候就可以不用指针或者引用类型, 像查询是否为空,只是得到数据(顺序表的长度),而不是修改就可以直接使用例如bool ListEmpty(SeqList L)的传参形式。 这是其实也是参数的传递的按照值传递和引用传递的区别。 不清楚的可以回去看一下教材。 再补充一点: void InitList(SeqList &L) { L.length = 0; }初始化的时候----使用时: SeqList L; InitList(L); void InitList(SeqList * L) { L->length = 0; }初始化的时候----使用时: SeqList L; InitList(&L); */ bool ListEmpty(SeqList L) { if (L.length==0) { return true; } return false; } /*按照序号来查找元素*/ int GetElemByNum(SeqList L, int i, DataType * e) { if (ListEmpty(L)) { return -1; } else if (i<1&&i>L.length) { return -1; } else { *e = L.list[i - 1]; return 1; } } /*查找线性表中元素所在的位置*/ int GetLocateElem(SeqList L, DataType e) { for (int i = 0; i <L.length; i++) { if (L.list[i]==e) { return i + 1; } } return -1; } /*往线性表中插入数据(1)判断线性表是否满,插入位置是否合理, 可插入的位置注意到第一个和最后一个*/ int InsertList(SeqList * L, int i, DataType e) { int j; if (L->length==MaxListSize) { return -1; } /*插入位置不合法*/ else if(i<1&&i>L->length+1) { return -1; } else { for ( j = L->length; j >i; j--) { L->list[j ] = L->list[j-1]; } L->list[i-1] = e; L->length = L->length + 1; return 1; } } /*删除线性表中的元素并且将删除的元素的值赋给e (1)先判断线性表是否为空 (2)删除位置是否合法*/ int DeleteList(SeqList * L, int i, DataType * e) { int j; if (ListEmpty(*L)) { return -1; } else if (i<1&&i>L->length) { return -1; } else { *e=L->list[i - 1]; for ( j= i; j< L->length; j++) { L->list[j - 1] = L->list[j]; } L->length = L->length - 1; return -1; } } int ListLength(SeqList L) { return L.length; } void ClearList(SeqList * L) { L->length = 0; } void PrintList(SeqList * L) { for (int i = 0; i < L->length; i++) { cout << L->list[i] << " "; } cout << endl; }
测试main:
int main() { SeqList L; InitList(&L); InsertList(&L, 1, 1); InsertList(&L, 2, 2); InsertList(&L, 3, 3); InsertList(&L, 4, 4); InsertList(&L, 5, 5); PrintList(&L); cout << ListLength(L) << endl; DataType e; DeleteList(&L, 1, &e); cout << e << endl; PrintList(&L); cout << GetLocateElem(L, 3) << endl; GetElemByNum (L,2,&e); cout << e << endl; cout << ListLength(L) << endl; system("PAUSE"); return 0; }
相关文章推荐
- 考研数据结构复习之线性表(二)
- 数据结构考研复习--线性表1
- 数据结构考研复习--线性表3(约瑟夫环)
- 模板复习计划——线性与半线性数据结构维护
- 《数据结构》复习之线性表(栈和队列)
- 复习(数据结构:java):线性表(数组):接口的写法
- 【留坑】 POJ2503 注意输入输出&&几种数据结构的复习、比较(线性表建立的字典 || 树建立的字典_即Trie || hash || map)
- 考研复习第三天-线性代数-矩阵运算
- 数据结构复习-线性表的定义和基本操作
- 数据结构考研复习——导入
- 数据结构复习-线性表的顺序表示
- 【数据结构复习】线性表的链式存储--单链表
- 软件设计师数据结构之线性结构复习小结
- 【郝斌数据结构自学笔记】57-59_递归8 _ 汉诺塔_1线性结构总复习 2线性结构和非线性结构关系 3栈队列链表数组之间的关系【重点】
- 复习(数据结构):线性表 : C
- 复习(数据结构:java):线性表(数组):迭代器
- 复习(数据结构:java):线性表(数组):泛型的写法
- 数据结构考研复习--线性表2
- 数据结构复习之线性表
- 复习(数据结构:java):线性表(数组):基础类设计