线性表的创建,添加,修改,清空,销毁,获得元素位置,前驱,后继

您所在的位置:网站首页 c语言如何建立线性表 线性表的创建,添加,修改,清空,销毁,获得元素位置,前驱,后继

线性表的创建,添加,修改,清空,销毁,获得元素位置,前驱,后继

2024-02-20 05:00| 来源: 网络整理| 查看: 265

 线性表的清空是把原空间中储存的元素清空,clear

线性表的创建是把原来的空间释放了,线性表的结构不存在了,下次再想使用只能重新初始化,free的是空间,destory

#include #include "stdio.h" #define LIST_INIT_SIZE 10 typedef int ElemType;//可以更改线性表元素的类型 typedef struct { int* elem; //指向已分配的一片连续储存空间 int lengh; //线性表中已添加的数据元素个数 int listsize;//线性表中最多能储存的数据元素个数 }SqList; int InitList(SqList& L) //创建一个空线性表,elem有空间,无元素 { L.elem = (int*)malloc(LIST_INIT_SIZE * sizeof(int));//申请Elem对应的内存空间用以存放线性表元素。 if (L.elem!=NULL) //判断分配空间是否成功 { L.lengh = 0; //线性表中已添加的数据元素,初值为0 L.listsize = LIST_INIT_SIZE; //记录Elem所对应空间的大小。 printf("线性列表初始化成功!\n"); return 1;//创建成功返回1 } else { return 0; } } int DestoryList(SqList& L) //销毁一个线性表,释放elem内存空间 { free(L.elem); //释放空间 L.elem = NULL; L.lengh = 0; L.listsize = 0; printf("销毁成功!\n"); return 1; } int ClesrList(SqList& L)//清空一个线性表,但仍保留空间 { L.lengh = 0; printf("清空成功!\n"); return 1; } int ListEmpty(SqList L)//判断一个线性表是否为空表 { if (L.lengh == 0) return 1;//判断是空表返回1 else return 0; } int ListLength(SqList& L)//获得线性表的长度,记忆保存的元素的个数 { return L.lengh; } int GetElem(SqList L, int i, int& e)//获得线性表的第i个元素,把值赋值给e { if (iL.lengh) { return 0;//线性表中没有这个元素 } e = L.elem[i - 1];//得到第i个元素 return 1; } int LocateElem(SqList L, int e) //在线性表中找到元素e在登记号位置上 { int i; for (i = 0; i < L.lengh; i++) { if (L.elem[i] == e) //遍历数组,若找到,返回具体位置 { return i + 1; } } return 0;//若未找到,返回0 } int PriorElem(SqList L, int cur_e, int& pre_e) //获得cur_e的前一个元素,赋值给pre_e { int i; for (i = 0; i < L.lengh; i++)//首先在线性表中查找cur_e { if (L.elem[i] == cur_e)//若找到,退出循环 { break; } } if (i == 0 || i == L.lengh)//数据不存在或无法添加 { return 0; } pre_e = L.elem[i - 1];//赋值前驱元素 return 1; } int NextElem(SqList L, int cur_e, int& next_e) //获得cur_e的后一个元素,赋值给next_e { int i; for (i = 0; i < L.lengh; i++)//首先在线性表中查找cur_e { if (L.elem[i] == cur_e)//若找到,退出循环 { break; } } if (i == L.lengh - 1 || i == L.lengh)//数据不存在或无法添加 { return 0; } next_e = L.elem[i + 1];// 赋值后继元素 return 1; } int ListInsert(SqList& L, int i, int e)//在第i个元素之前插入一个元素 { int j; if (iL.lengh + 1) { return 0;//判断i的值是否合理 } if (L.lengh >= L.listsize) { L.elem = (int*)malloc(LIST_INIT_SIZE * sizeof(int)); // 此时由于表中元素已经将Elem对应的内存空间占满,扩大该空间以容纳更多的表元素 L.listsize += LIST_INIT_SIZE;// 记录新空间的大小。 } for (j = L.lengh; j >= i-1; j--) { L.elem[j+1] = L.elem[j ];//一部分元素向后移动一个位置 L.elem[i - 1] = e;//元素e插入第i号位置 L.lengh++;//线性表的长度加1 return 1; } } int ListModifyElem(SqList L,int i ,int e ) { // 将线性表中第i个的元素值修改成参数e的值。 if (i< 1 || i> L.lengh) return 0; L.elem[i - 1] = e; return 1; } int ListDelete(SqList& L, int i, int& e)//删除第i个元素,并返回第i个元素的值 { int j; if (iL.lengh) { return 0;//判断i的值是否合理 } else { e = L.elem[i - 1];//把第i个元素的值赋给e for (j = i; j < L.lengh; j++) { L.elem[j - 1] = L.elem[j];//吧第i个元素后面的元素向前移动一个位置 } L.lengh--;//只删除一个元素,线性表长度减少1 return 1; } } int ListTraverse(SqList L)//线性表的遍历,按照从前向后的顺序依次打印输出顺序表中的元素, { int i; for (i = 0; i < L.lengh; i++) { printf("%d ", L.elem[i]); } printf("\n"); return 1; } int main(int argc, char** argv) { SqList L; int i, n , j; ElemType e1, e2, e3, e4, e5, e6, e7, e8, e9; InitList(L);//创建线性表 printf("输出当前的线性列表:\n"); for (i = 1; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3