赞
踩
数据结构——线性表
顺序存储——顺序表基本操作(创建、初始化、赋值、插入、删除、查询、替换、输出)c语言实现
1、创建、申请空间
2、初始化、顺序表数据结构大小、长度
3、赋值、顺序表数据结构赋值
4、插入、在指定位置插入数据,后续数据循环后移,长度增加,空间大小增加或者不变
5、删除、删除指定位置的数据,后续数据循环前移,长度减小、空间大小不变
6、查询、查看指定数据是否在顺序表结构中
7、替换、将顺序表结构中指定数值替换为另外的数值
8、输出、输出顺序表结构中存储的数据(根据长度大小输出)
手撕代码如下
#include <stdio.h> #include <stdlib.h> #define Size 5 //定义顺序表结构 typedef struct { int *data;//指示动态分配数组的指针 int length;//当前数据长度 int size;//数组的最大容量 }Sqlist; //初始化顺序表结构 Sqlist InitList(Sqlist &L) { if ((L.data = (int *)malloc(Size*sizeof(int))) == NULL) { printf("申请存储空间失败!"); exit(1); } L.length = 0;//初始化长度为 0 L.size = Size;//结构大小 return L; } //结构赋值 Sqlist Assignment(Sqlist &L) { int i; for (i = 0; i < L.size; i++) { L.data[i] = i + 1; L.length++;//长度随赋值情况增加 } return L; } //输出结构存储情况 Sqlist Export(Sqlist L) { printf("存储的数据如下:\n"); for (int i = 0; i < L.length; i++) printf("%d ", L.data[i]); printf("\n"); return L; } //插入数据 bool ListInsert(Sqlist &L,int i,int e)//***** { if(i<1||i>L.length+1)//判断i是否有效 { return false; } if(L.length>=Size)//当前存储空间已满,不能插入 { return false; } for(int j=L.length;j>=i;j--)//将第i个元素及之后的元素后移 { L.data[j]=L.data[j-1]; } L.data[i]=e; L.length++; return true; } //删除指定数据 bool ListDelete(Sqlist &L, int i,int &e) { if(i<1||i>L.length) { return false; } e=L.data[i-1];//将被删除的元素赋值给e for(int j=i;j<L.length;j++)//将第i个位置后的元素前移 { L.data[j-1]=L.data[j]; } L.length--;//长度减1 return true; } //查询指定数据,返回在数据结构中的位置 int LocateElem(Sqlist L,int e) { int i; for (i = 0; i <= L.length; i++) { if (L.data[i] == e) return i+1;//下标为i的元素值等于e,返回其位序i+1 } return 0;//退出循环,说明查找失败 } //替换指定数据 Sqlist Replace(Sqlist L, int elme, int e)//elme是要被替换的元素,e是替换元素 { int i=LocateElem(L,elme); L.data[i-1] = e; return L; } //主函数 int main() { Sqlist L; L=InitList(L); L = Assignment(L); Export(L); printf("\n----------------\n"); int elme; printf("请输入插入的位置:"); scanf("%d", &elme); int e; printf("请输入插入数据:"); scanf("%d", &e); if (elme > L.size+1 || elme < 0) { printf("输入的位置错误\n"); exit(0); } L= Replace(L,elme,e); Export(L); printf("\n----------------\n"); printf("请输入删除的位置:"); scanf("%d", &elme); if (elme > L.size || elme < 0) { printf("输入的位置错误\n"); exit(0); } int a=0; ListDelete(L, elme, a); printf("删除的元素是:%d\n",a); Export(L); printf("\n----------------\n"); printf("查找 5 的位置\n"); int b=LocateElem(L, 5); printf("5 的位置是 %d\n",b); Export(L); printf("\n----------------\n"); printf("用 55 替换 5\n"); Replace(L, 5, 55); Export(L); system("pause"); return 0; }
*程序运行结果 *
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。