赞
踩
@Sock对静态顺序表和动态顺序表的总结
相同点:内存空间连续, 数据顺序存储
不同点:它们所占内存空间的位置不同, 静态定义一个顺序表, 顺序表所占的内存空间开辟在内存的静态区, 即所谓的函数栈上, 随着函数调用的结束, 这块内存区域会被系统自动回收; 而动态生成一个顺序表, 顺序表所占的内存空间开辟在内存的动态区, 即所谓的堆内存上, 这块区域不会随着函数调用的结束被系统自动回收, 而是需要程序员主动去释放它.
静态顺序表:操作简单, 不用手动释放其内存空间, 不存在内存泄漏
动态顺序表:可以动态开辟内存空间, 操作灵活, 避免不必要的开销
静态顺序表的实现
定义一个静态顺序表
//定义一个静态顺序表
#define MAXSIZE 100
typedef int ElemType;
ElemType SqList[MAXSIZE];
int len;
向静态顺序表中插入元素
//向静态顺序表中插入元素 void InsertElem(ElemType* S, int* len, int pos, ElemType e) { //判断插入位置是否合理 if (*len == MAXSIZE || pos < 1 || pos > *len + 1) { printf("表满或插入位置不合理\n"); exit(0); } //调整插入位置, 准备插入指定元素 for (int i = *len - 1; i >= pos - 1; --i) { *(S + i + 1) = *(S + i); } //插入指定元素 *(S + pos - 1) = e; //元素个数加 1 ++(*len); }
从静态顺序表中删除元素
//向静态顺序表中删除元素 void DelElem(ElemType* S, int* len, int pos) { //判断删除位置是否合理 if (pos < 1 || pos > *len) { printf("删除位置不合理\n"); exit(0); } //调整删除位置, 准备删除指定元素 for (int i = pos; i < *len; ++i) { *(S + i - 1) = *(S + i); } //元素个数减 1 --(*len); }
遍历静态顺序表
//遍历顺序表
void Traverse(ElemType* S) {
for (int i = 0; i < len; ++i) {
printf("%d ", *(S + i));
}
printf("\n");
}
测试
#include <stdio.h> #include <windows.h> //定义一个静态顺序表 #define MAXSIZE 100 typedef int ElemType; ElemType SqList[MAXSIZE]; int len; //向静态顺序表中插入元素 void InsertElem(ElemType* S, int* len, int pos, ElemType e) { //判断插入位置是否合理 if (*len == MAXSIZE || pos < 1 || pos > *len + 1) { printf("表满或插入位置不合理\n"); exit(0); } //调整插入位置, 准备插入指定元素 for (int i = *len - 1; i >= pos - 1; --i) { *(S + i + 1) = *(S + i); } //插入指定元素 *(S + pos - 1) = e; //元素个数加 1 ++(*len); } //向静态顺序表中删除元素 void DelElem(ElemType* S, int* len, int pos) { //判断删除位置是否合理 if (pos < 1 || pos > *len) { printf("删除位置不合理\n"); exit(0); } //调整删除位置, 准备删除指定元素 for (int i = pos; i < *len; ++i) { *(S + i -
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。