C语言线性表之顺序表的13种函数操作 您所在的位置:网站首页 线性表基本操作c语言 C语言线性表之顺序表的13种函数操作

C语言线性表之顺序表的13种函数操作

2023-10-27 03:33| 来源: 网络整理| 查看: 265

学习数据结构开始就会学到第一种数据存储结构–线性表,学习线性表时一定会先学到顺序表,顺序表是一个较为简单的线性表,没有链表满天飞的指针。它的本质就是申请一块连续的内存,和数组相似,保存第一个地址的指针就欧克了,在通过第一个地址往后偏移若干量来实现能对所有进行操作。直接看一下创建一个线性表及多种操作的代码吧。

#include #include #define OK 1 #define FALSE -1 #define TURE 1 #define ERROR -1 #define OVERFLOW -1 #define INFEASIBLE -1 #define LIST_INIT_SIZE 100 //初始顺序表长度 #define LISTINCREMENT 10 //插入元素内存不够时每次申请这么大的补加容量 typedef int Status; typedef int ElemType; typedef struct { ElemType *elem;//顺序表首位置指针 int length;//记录顺序表存了多少长度 int listsize;//记录顺序表大小 }Sqlist;//定义结构体,创建顺序表方便 Status InitList(Sqlist &L)//建立并初始化顺序表 { L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType)); if (!L.elem) exit(OVERFLOW);//如果没有那么大空间了报错 L.length = 0; L.listsize = LIST_INIT_SIZE; return OK; } void Destorylist(Sqlist &L)//销毁顺序表 { if (L.elem) { free(L.elem); L.elem = NULL; printf("L has been destoried.\n"); } } void ClearList(Sqlist &L)//清空顺序表 { L.length = 0;//实际上原来表里的元素没有删除,只是通过length归零不能查看而已 printf("L has been cleared.\n"); } Status EmptyList(Sqlist L)//判断是否为空 { if (L.length == 0) return TURE; else return FALSE; } Status LengthList(Sqlist L)//求长度 { return L.length; } Status GetElem(Sqlist L, int i, ElemType &e)//求第几个位置上的元素 { if (L.length == 0 || iL.length) return ERROR; e = L.elem[i - 1]; return e; } Status LocateELem(Sqlist L, ElemType e)//求某元素在第几个位置上 { int i = 1; bool cmp = 0; if (L.length == 0) return 0; else { while (i = q; p--) *(p + 1) = *p; *q = e; L.length++; return e; } Status DeleteElem(Sqlist &L, int i, ElemType e)//删除元素 { ElemType *p, *q; if (!L.elem) return ERROR; if (iL.length) return ERROR; q = &L.elem[i - 1]; e = *q; for (p = &L.elem[i - 1]; p < &L.elem[L.length - 1]; ++p) { *p = *(p + 1); } L.length--; return e; } void TraverList(Sqlist L)//遍历表 { int i; for (i = 0; i < L.length; i++) printf("%5d", L.elem[i]); } Status CompareList(Sqlist L, ElemType e1, ElemType e2)//比较大小 { if (e1 > e2 || e2 == e2) return TURE; else return FALSE; } int main() { Sqlist L; InitList(L); int a, b, c, d = 0, f, g, i; ElemType e = 0; //初始化测试 printf("初始顺序表的长度%d\n\n", LengthList(L)); printf("请输入要添加的元素个数:"); scanf_s("%d", &L.length); //求表长测试 printf("\n当前顺序表的长度%d\n", LengthList(L)); printf("\n请输入线性表元素:"); for (i = 0; i < L.length; i++) scanf_s("%d", &L.elem[i]); //遍历测试 printf("\n您输入的元素为:"); TraverList(L); printf("\n"); //定位操作 printf("请输入你要定位的元素:"); scanf_s("%d", &g); printf("%d的位置为:%d\n", g, LocateELem(L, g)); //求前驱测试 printf("请输入你想求前驱的元素:"); scanf_s("%d", &a); printf("\n"); printf("%d的前驱为:%d", a, PriorElem(L, a, d)); //求后继测试 printf("\n请输入你想求后继的元素: "); scanf_s("%d", &f); printf("\n"); printf("%d的后继为:%d", f, NextElem(L, f, d)); //取元素测试 printf("\n接下来测试取元素\n\n请输入你想取出的元素位序:"); scanf_s("%d", &i); printf("\n\n"); printf("你取出的元素为:%d", GetElem(L, i, e)); printf("\n\n"); //删除测试 printf("现在测试删除\n\n请输入删除位置: "); scanf_s("%d", &b); printf("\n"); printf("你删除的元素为: %d", DeleteElem(L, b, e)); printf("\n\n"); printf("现在线性表中的元素为:"); for (i = 0; i < L.length; i++) printf("%5d", L.elem[i]); //插入测试 printf("\n现在测试插入\n"); printf("请输入你要插入的位置:"); scanf_s("%d", &c); printf("\n"); printf("请输入你要插入的元素:"); scanf_s("%d", &e); printf("\n"); printf("你插入的元素为:%d", InsertElem(L, c, e)); printf("\n"); printf("现在顺序表为: "); for (i = 0; i < L.length + 1; i++) printf("%5d", L.elem[i]); return 0; }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有