线性表的顺序储存结构定义(动态)实现
2017-02-01 13:28
483 查看
代码示例:
/* function:线性表的顺序储存结构定义(动态)实现线性表的初始化、插入、删除和显示功能 created by: xilong date: 2017.2.1 */ #include "iostream" using namespace std; #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define LIST_INIT_SIZE 20 //线性表存储空间的初始分配量 #define OVERFLOW -2 #define LISTINCREMENT 10 //线性表存储空间的分配增量 typedef int Status; typedef int ElemType; typedef struct { ElemType *data; // 存储空间基址 int length; // 当前长度 int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位) } SqList; /* 初始化操作,构造空的线性表L */ Status initList(SqList *L) { L->data = (int *)malloc(LIST_INIT_SIZE * sizeof(int)); if (!L->data) exit(OVERFLOW); //存储分配失败 L->length = 0; L->listsize = LIST_INIT_SIZE; return OK; } // 遍历线性表 Status listTraverse(SqList *L){ int i; for (i = 0; i < L->length; i++){ printf("%d ", L->data[i]); } printf("\n"); return OK; } // 释放资源 void free(SqList *L) { free(L->data); L->length = 0; } /* 在线性表中第i个元素位置上,插入一个指针e所指的元素 */ Status listInsert(SqList *L, int i, ElemType e) { if (i < 1 || i> L->length + 1) { return ERROR; // 输入不合法 } if (L->length <= LIST_INIT_SIZE) { ElemType *newnode = (int *)realloc(L->data,(LISTINCREMENT + LIST_INIT_SIZE) * sizeof(int)); if (!newnode) exit(OVERFLOW); L->data = newnode; L->listsize += LISTINCREMENT; } ElemType *p = &(L->data[i - 1]); // 待插入元素的位置,指针 p 指向待插入元素的位置 ElemType *q; for (q = &(L->data[L->length - 1]); q >= p; --q){ *(q + 1) = *q; // 从待插入元素的位置开始,将指针向后移动一位 } *p = e; // 插入元素 ++L->length; } /* 删除指定位置的元素 */ Status listDelete(SqList *L, int i, ElemType &e) { if (i < 1 || i > L->length) { return ERROR; } ElemType* p = &(L->data[i - 1]); // 待删除元素位置 e = *p; //ElemType* q = L->data + L->length - 1; for (; p < &(L->data[L->length - 1]); p++){ // 从p(不包含p)后面的元素开始依次向前移一位 * p = *(p + 1); } L->length--; return OK; } void main() { SqList L; ElemType e; initList(&L); cout << "初始化成功!"<< endl; cout << "开始插入............................................." << endl; listInsert(&L, 1, 10); listInsert(&L, 2, 20); listInsert(&L, 3, 30); listInsert(&L, 4, 40); listInsert(&L, 5, 50); listInsert(&L, 2, 60); cout << "插入完毕!" << endl; cout << "打印线性表中的所有数据:"; listTraverse(&L); cout << "开始删除............................................" << endl; listDelete(&L, 3, e); listDelete(&L, 5, e); cout << "删除成功!" << endl; cout << "删除后打印线性表中的所有数据:"; listTraverse(&L); cout << "释放内存............................................" << endl; free(&L); cout << "释放内存完成!" << endl; system("pause"); }
程序截图:
相关文章推荐
- 【数据结构作业一】写出顺序表的结构体类型定义及查找、插入、删除算法,并以顺序表作存储结构,实现线性表的插入、删除
- 线性结构--->循环队列的顺序储存实现
- 线性表(顺序存储)结构与功能的简易实现
- 线性结构的顺序存储和链式存储的实现代码(二)
- 线性表的顺序表示和实现 - 数据结构
- 线性表之顺序表的结构与实现
- 数据结构实现顺序线性表的一些小应用
- 栈的顺序储存结构及实现
- 线性结构的顺序存储的实现
- Java 实现顺序结构线性列表
- ArrayList,List等非链式线性结构是如何实现动态增长的
- 顺序结构线性表的实现
- 线性结构的顺序表实现 Java版
- 线性表——顺序结构(c语言实现)
- 利用顺序结构实现线性表的基本操作
- 线性表——顺序结构(c语言实现)
- 数据结构之:线性表的顺序表示和实现
- 线性表之顺序表的结构与实现
- 线性表--顺序储存结构
- 线性表顺序结构的实现