【数据结构】C语言实现顺序表
来源:互联网 发布:网络安全产品排名榜 编辑:程序博客网 时间:2024/04/28 07:43
这是自己上数据结构课程时候的练习,贴出来,供大家参考一下,注释写的很详细,main函数里有测试的代码.
#include "stdafx.h"#include<stdio.h>#include<stdlib.h>#define LIST_INIT_SIZE 100#define LIST_INCREASMENT 10#define FALSE 0#define TRUE 1#define ERROR 0#define OK 1typedef int ElemType;//定义的数据元素的类型,之所以设置为ElemType是考虑到可扩展行的原因,如果想把数据元素的类型修改成其他的话,只需要在这里修改一次据好了,比较方便typedef int Status;/***定义线性表的数据结构*/typedef struct{ElemType *base;//base为线性表指向线性表起始地址的指针int length;//length为当前线性表的长度int listSize;//listSize为线性表的总长度} SqList;/*创建线性表*/void initList(SqList *L){L->listSize = LIST_INIT_SIZE; //初始化线性表的总长度为我们事先定义好的LIST_INIT_SIZE,也就是100L->base = (ElemType *)malloc(L->listSize * sizeof(ElemType)); //为线性表申请内存空间,大小为线性表的总长度 乘以 每一个元素所占空间的大小L->length = 0;//创建线性表的时候没有数据元素,长度默认为0}/***判断顺序表是否为空*/bool listEmpty(SqList *L){return L->length == 0;}/***得到线性表当前的长度*/int listLength(SqList *L){if(L->length >= 0 && L->length <= L->listSize){return L->length;} else{return -1;}}/***线性表的插入操作*/Status listInsert(SqList *L, int i, ElemType e){//我们这里传入的i是用户眼中的位置,意思就是从1开始,而不是从程序员熟悉的0开始int k;if(L->length == L->listSize){printf("线性表已满,不能插入");return ERROR;}if(i<1 || i>L->length + 1){printf("插入的位置不正确");return ERROR;}if(i <= L->length){ //若插入的位置不在表尾for(k=L->length - 1; k>i - 1; k--){L->base[k + 1] = L->base[k];}}L->base[i - 1] = e;L->length = L->length + 1;return OK;}/***删除一个表中的元素*/Status listDelete(SqList *L, int i, ElemType *e){int k;//这里的e是用来暂存被删除的元素的if(L->length == 0){//如果表为空的话,则返回错误return ERROR;}if(i<1 || i>L->length){//如果删除的位置不正确return ERROR;}*e = L->base[i - 1]; if(i < L->length){for(k=i; k<L->length; k++){L->base[k - 1] = L->base[k];}}L->length = L->length - 1;return OK;}/***得到指定位置的元素的值*/ElemType getElem(SqList *L, int i){if(i<1 || i>L->length){//先做检查return ERROR;}return L->base[i - 1];//结果一返回值的形式得到}/***得到指定位置元素的前驱*/ElemType priorElem(SqList *L, int i){if(i<1 || i>L->length){//先做检查return ERROR;}if(i != 1){return L->base[i-2];} else {printf("线性表的第一个元素没有前驱,操作错误!");return ERROR;}}/***得到指定位置元素的后继*/ElemType nextElem(SqList *L, int i){if(i<1 || i>L->length){//先做检查return ERROR;}if(i != L->length){return L->base[i];} else {printf("线性表的最后一个元素没有后继,操作错误!");return ERROR;}}/***清空线性表*/bool clearList(SqList *L){if(L->length>0 && L->length<L->listSize){L->length = 0;return OK;} else{return ERROR;}}/***销毁线性表*/Status destroyList(SqList *L){clearList(L);//先清空线性表L->listSize = 0;//把线性表的总长度归零free(L->base);//释放内存空间if(L->base == NULL && L->length == 0 && L->listSize == 0){//最后再进行确认return TRUE;} else{return FALSE;}}/***遍历当前线性表,打印输出所有的元素*/void listTraverse(SqList *L) { ElemType *p; int i; p = L->base; for(i = 1; i <= L->length; i++) { printf("%d ", *(L->base + i - 1)); } printf("\n\n"); } /***定位一个指定的值在线性表里的具体位置*/int LocateElem(SqList *L, int e) { ElemType *p; int i = 1; // i的初值为第1个元素的位序 p = L->base; // p的初值为第1个元素的存储位置 while(i <= L->length && *(p++) != e){ ++i; } if(i <= L->length) { return i; } else { return 0; } } int _tmain(int argc, _TCHAR* argv[]){ElemType e;char ch = NULL;SqList L;initList(&L);//创建一个表printf("创建线性表后\n线性表的当前长度:%d", L.length);printf("\n线性表的总长度:%d", L.listSize);if(listEmpty(&L)){//判断表是否为空printf("\n此时线性表为空");} else {printf("\n此时线性表不为空");}//插入一个元素if(listInsert(&L, 1, 500)){printf("\n第一个元素的值:%d", getElem(&L, 1));}printf("\n线性表的当前长度:%d", L.length);if(listInsert(&L, 2, 1000)){printf("\n第二个元素的值:%d", getElem(&L, 2));}printf("\n线性表的当前长度:%d", L.length);if(listInsert(&L, 3, 2000)){printf("\n第三个元素的值:%d", getElem(&L, 3));}printf("\n线性表的当前长度:%d\n", L.length);listTraverse(&L);printf("\n第二个元素的前驱是:%d", priorElem(&L, 2));printf("\n第二个元素的后继是:%d", nextElem(&L, 2));if(listDelete(&L, 1, &e)){printf("\n被删除的元素的值:%d", e);}printf("\n线性表的当前长度:%d\n", L.length);listTraverse(&L);scanf("%c", &ch);return 0;}
0 0
- C语言实现数据结构中的顺序表
- c语言实现数据结构顺序表源代码
- 数据结构C语言实现之顺序表
- 数据结构--顺序表c语言实现
- 【数据结构】C语言实现顺序表
- 【数据结构】C语言实现顺序链表
- [c语言]数据结构 顺序表的实现
- 【数据结构】实现顺序表(c语言)
- 数据结构-队列-顺序表实现-C语言
- C语言实现顺序表-数据结构
- 【数据结构】C语言实现顺序表(静态顺序表)
- 【数据结构】C语言实现顺序表(动态顺序表)
- 数据结构:顺序表的实现(C语言实现)
- C语言数据结构-顺序表
- 数据结构之---c语言实现线性表的顺序表
- 数据结构--线性表.顺序表(C语言实现)
- 一、数据结构基础之顺序表C语言实现
- C语言数据结构之:顺序表的实现
- json 格式与PHP json 格式
- 使用 monitor command 监控 QEMU 运行状态
- Puzzle, ACM/ICPC World Finals 1993, UVa227
- 使用Apache CXF和Spring集成创建Web Service
- 光阴旋转, 为何学无所成
- 【数据结构】C语言实现顺序表
- QT拖拽源码解析
- JavaScript 程序设计基础(02) -- 表单,常用的表单类型介绍,外部样式表
- 深入浅出Android Gradle构建系统(一:简介)
- 为什么很多大公司都面试算法和数据结构
- 第一天创建
- 【数据结构】C语言实现顺序链表
- 项目分析、技术的定义和特点
- 最强日期正则表达式