C语言数据结构——顺序表
2016-01-07 22:11
513 查看
数据结构的一些讲解,供学习者参考,也顺带作为复习
线性表的顺序存储是指在内存中用地址连续的一块存储空间顺序存放线性表的各元素,用这种存储形式存储的线性表称为顺序表。因为内存中的地址空间是线性的,因此,用物理上的相邻实现数据元素之间的逻辑相邻关系既是简单又自然的。
将数据存储区data和指针last封装成一个结构体作为顺序表的类型
顺序表的初始化
顺序表的插入算法
输出顺序表的所有元素
顺序表的查找算法
顺序表的删除算法
删除顺序表指定位置的元素
主函数代码,仅供学习参考
运行结果如下图
需要源代码的欢迎下载,免积分,共同学习,接下来会每天分享一篇,持续一个星期
http://download.csdn.net/detail/kevin_iot/9395161
线性表的顺序存储是指在内存中用地址连续的一块存储空间顺序存放线性表的各元素,用这种存储形式存储的线性表称为顺序表。因为内存中的地址空间是线性的,因此,用物理上的相邻实现数据元素之间的逻辑相邻关系既是简单又自然的。
将数据存储区data和指针last封装成一个结构体作为顺序表的类型
struct LinearList<span style="white-space:pre"> </span>/*定义顺序表结构*/ { <span style="white-space:pre"> </span>int *list;<span style="white-space:pre"> </span>/*存顺序表元素*/ <span style="white-space:pre"> </span>int size;<span style="white-space:pre"> </span>/*存顺序表长度*/ <span style="white-space:pre"> </span>int MaxSize;<span style="white-space:pre"> </span>/*存list数组元素的个数*/ };
顺序表的初始化
/*顺序表的初始化函数*/ void InitList (LIST *L,int ms) { <span style="white-space:pre"> </span>if((L->list=(int *)malloc(ms*sizeof(int)))==NULL) <span style="white-space:pre"> </span>{ <span style="white-space:pre"> </span>printf("内存申请失败!\n"); <span style="white-space:pre"> </span>exit(1); <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>L->size = 0; <span style="white-space:pre"> </span>L->MaxSize = ms; <span style="white-space:pre"> </span>printf("链表创建成功!\n"); }
顺序表的插入算法
/*顺序表的插入算法,item:记录插入的值;rc:记录插入的位置*/ int InsertList(LIST *L, int item, int rc) { int i; if((L->size)>=L->MaxSize) return -1; /*顺序表已满*/ if(rc<0) /*插入位置为0到L->size*/ rc = 0; if(rc>L->size) rc = L->size; for(i=L->size-1;i>=rc;i--) /*将rc后面的元素后移*/ L->list[i+1]=L->list[i]; L->list[rc]=item; L->size++; return 0; }
输出顺序表的所有元素
/*输出顺序表所有元素*/ void OutputList(LIST *L) { int i; for(i=0;i<L->size;i++) printf("%d",L->list[i]); printf("\n"); }
顺序表的查找算法
/*查找算法*/ int FindList(LIST *L,int item) { int i; for(i=0;i<L->size;i++) if(L->list[i]==item) /*找到相同元素,返回元素的位置*/ return i; return -1; /*无法找到,返回-1*/ }
顺序表的删除算法
/*删除元素,item:删除元素的值*/ int DeleteList_1( LIST *L,int item) { int i,n; for(i=0;i<L->size;i++) /*找到相同的元素*/ if(item==L->list[i]) break; if(i<L->size) { for(n=i;n<L->size-1;n++) L->list = L->list[n+1]; L->size--; return i; } return -1; }
删除顺序表指定位置的元素
/*删除指定位置的数据*/ int DeleteList_2( LIST *L,int rc) { int n; if(rc<0||rc>L->size) return -1; for(n=rc;n<L->size-1;n++) L->list =L->list[n+1]; L->size--; return 0; }
主函数代码,仅供学习参考
void main() { LIST LL; /*顺序表*/ int i,r,n,model; /*i:元素值;r:插入位置;n:顺序表长度;model:选择行为模式*/ printf("请输入所需链表的长度:\t"); scanf("%d",&n); fflush(stdin); InitList(&LL,n); printf("list addr = %p\tsize = %d\tMaxSize = %d\n",LL.list,LL.size,LL.MaxSize); while(1) { printf("请选择你需要的操作\n【1】插入数据\n【2】查找数据\n【3】删除特定位置的数据\n【4】删除链表中的某个数据\n【5】遍历并输出线性表\n【6】退出\n"); scanf("%d",&model); fflush(stdin); switch(model) { case 1: while(1) { printf("请输入插入元素值:\t"); scanf("%d",&i); if(i==0) break; printf("请输入插入的位置:\t"); scanf("%d",&r); if((InsertList(&LL,i,r-1))==-1) printf("插入失败!"); printf("当前线性表为:\n"); OutputList(&LL); } break; case 2: while(1) { printf("请输入查找元素值:\t"); scanf("%d",&i); if(i==0) break; r=FindList(&LL,i); if(r<0) printf("没有找到\n"); else printf("元素位置为:%d\n",r+1); } break; case 3: while(1) { printf("请输入删除的元素位置:\t"); scanf("%d",&r); if(r==0) break; i=DeleteList_2(&LL,r-1); if(i<0) printf("位置越界\n"); else { printf("线性表为:"); OutputList(&LL); } } break; case 4: while(1) { printf("请输入删除的元素值:\t"); scanf("%d",&i); if(i==0) break; r=DeleteList_1(&LL,i); if(r<0) printf("没有找到该元素\n"); else { printf("位置为%d的元素已经删除\n",r+1); printf("线性表为:"); OutputList(&LL); } } break; case 5: OutputList(&LL); break; case 6: exit(0); default: printf("请重新输入:\n"); break; } }
运行结果如下图
需要源代码的欢迎下载,免积分,共同学习,接下来会每天分享一篇,持续一个星期
http://download.csdn.net/detail/kevin_iot/9395161
相关文章推荐
- ArrayList和LinkedList
- 数据结构--排序-查询-二叉树各种遍历-求深度
- 数据结构概论
- swift学习02-数据结构和类
- 数据结构-链表快速排序
- 03.C#数据结构ArrayList、Hashtable、List泛型、Dictionary字典
- nginx的核心数据结构ngx_cycle
- 如何将数据结构和算法应用到实际之中?
- c实现的各种排序
- 数据结构-数组详解例子
- 3-4-迷宫寻路-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版
- 数据结构清华大学公开课
- 3-3-行编辑程序-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版
- 3-2-进制转换-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版
- WinPcap编程常用函数和数据结构
- 数据结构之HashTable
- 数据结构—线性表AUB
- 数据结构:队列的概念和实现
- 数据结构与算法——插入排序以及C++函数模板实现
- 三种改进型排序算法-快速排序,堆排序,希尔排序