静态顺序表的实现(数组实现)
2017-12-04 14:20
260 查看
静态顺序表
静态顺序表实现的文件seqlist.c"增删查改"以及测试代码如下:
#include"SeqList.h" void InitSeqList(SeqList *seq) //1. 初始化(无需将每个元素置0,只需设置有效元素个数就可以) { assert(seq); seq->size = 0; } void AddBack(SeqList *seq, TypeData data) //2. 尾插 { assert(seq); if (seq->size >= SeqMaxLenth) { return; } seq->size++; seq->Data[seq->size - 1] = data; } void DelBack(SeqList *seq) //3. 尾删 { assert(seq); if (seq->size <= 0) { return; } seq->size--; } void AddFront(SeqList *seq, TypeData data) //4. 头插 { assert(seq); if (seq->size >= SeqMaxLenth) { return; } seq->size++; int i = seq->size - 1; for (; i > 0; i--) { seq->Data[i] = seq->Data[i - 1]; } seq->Data[0] = data; } void DelFront(SeqList *seq) //5. 头删 { assert(seq); if (seq->size <= 0) { return; } size_t i=0; for (; i < seq->size-1; i++) { seq->Data[i] = seq->Data[i + 1]; } seq->size--; } TypeData Get(SeqList *seq, size_t pos) //6. 读任意位置元素 { assert(seq); if (pos>seq->size-1) { return -1; //若位置无效,则返回-1 } return seq->Data[pos]; } void Mulity(SeqList *seq, size_t pos, TypeData data) //7. 修改任意位置元素 { assert(seq); if (pos > seq->size - 1) { return; } seq->Data[pos] = data; } size_t Search(SeqList *seq, TypeData data) //8. 查找指定元素值的下标 { assert(seq); size_t i = 0; for (; i < seq->size; i++) { if (seq->Data[i] == data) return i; } return -2; //若没有找到,则返回-2 } void Insert(SeqList *seq, size_t pos, TypeData data) //9. 在任意位置插入元素 { assert(seq); if (seq->size >= SeqMaxLenth) { return; } seq->size++; size_t i = seq->size-1; for (; i >pos; i--) { seq->Data[i] = seq->Data[i -1]; } seq->Data[pos] = data; } void SeqListPrint(SeqList *seq) //打印顺序表 { assert(seq); size_t i = 0; for (; i < seq->size; i++) { printf("[%p:],[%d]\t", &seq->Data[i], seq->Data[i]); } printf("\n"); } void Test1() //测试 { SeqList seq; size_t tmp=0; InitSeqList(&seq); AddBack(&seq, 1); AddBack(&seq, 2); AddBack(&seq, 3); AddBack(&seq, 4); SeqListPrint(&seq); DelBack(&seq); SeqListPrint(&seq); AddFront(&seq, 4); SeqListPrint(&seq); DelFront(&seq); DelFront(&seq); SeqListPrint(&seq); Mulity(&seq, 0, 8); SeqListPrint(&seq); tmp=Get(&seq, 3); printf("%d\n", tmp); tmp = Get(&seq, 1); printf("%d\n", tmp); tmp=Search(&seq, 3); printf("%d\n", tmp); tmp = Search(&seq,6); printf("%d\n", tmp); Insert(&seq, 1, 0); Insert(&seq, 2, 0); Insert(&seq, 0, 0); SeqListPrint(&seq); }
为外部提供的接口seqlist.h
#ifndef __SEQLIST_H__ #define __SEQLIST_H__ #include<assert.h> #include<stdio.h> #include<stdlib.h> #define SeqMaxLenth 1000 typedef int TypeData; typedef struct SeqList{ TypeData Data[SeqMaxLenth]; //静态顺序表数据 size_t size; //有效元素个数 }SeqList; void InitSeqList(SeqList *seq); void AddBack(SeqList *seq, TypeData data); void DelBack(SeqList *seq); void AddFront(SeqList *seq, TypeData data); void DelFront(SeqList *seq); TypeData Get(SeqList *seq, size_t pos); size_t Search(SeqList *seq, TypeData data); void Mulity(SeqList *seq, size_t pos, TypeData data); void SeqListPrint(SeqList *seq); void Test1(); #endif
外部测试代码main.c
#include"SeqList.h" int main() { Test1(); system("pause"); return 0; }总结如下:
数组有元素个数限制,故,添加元素时,需判断数组是否已满;删除元素时,需判断数组是否为空。
用宏定义数组最大容量,用typedef定义数据类型,能够使程序灵活,当需求改变时,只需改变这一处即可。
查找元素时,也应分元素存在与不存在两种情况进行讨论。
相关文章推荐
- 实现基于静态数组的顺序表的以下基本操作:
- 实现基于静态数组的顺序表的以下基本操作:
- 实现基于静态数组的顺序表
- 实现基于静态数组的顺序表的以下基本操作(进阶部分)
- 实现基于静态数组的顺序表
- 实现基于静态数组的顺序表的以下基本操作:
- linux下使用vim实现基于静态数组的顺序表的一些基本操作
- !-- 基于静态数组的顺序表相关操作C语言实现 --!
- 静态数组顺序表的基本操作实现
- 静态数组实现的顺序表(C语言实现)
- 顺序表——简单实现(静态数组)
- 九度 题目1009:二叉搜索树 (静态数组构建二叉树\二叉树的数组实现)
- Java 数组实现顺序队列
- C实现静态顺序表(增删查改基本函数+选择排序+冒泡排序+二分查找)
- 静态顺序表的实现及相关操作源代码(插入,删除,排序,逆置,超详细)
- C++实现静态顺序表的增删查改以及初始化
- 静态和动态顺序表的实现(c语言)
- 顺序表的实现---静态
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现,附代码)
- 静态顺序表的c实现