数据结构 - 顺序表
来源:互联网 发布:淘宝卖农产品赚钱吗 编辑:程序博客网 时间:2024/06/05 18:03
顺序表的特点(数组实现):
线性表:具有相同数据类型的数据元素的有限集合 包括顺序表,链表
顺序表:逻辑上相邻的元素存储在物理位置相邻的存储单元中,通常用数组实现。
//线性表:数组里面放任意数据类型 (包括结构体)typedef struct{ char name[10]; int age;}datatype;typedef struct{ datatype data[10]; int len;}sqlist;
数组:相同数据类型的变量按一定次序排列的数据集合。
1> 物理存储位置上的临接关系来表示逻辑关系2>可通过数组下标随机访问任意元素 3>不用尾结点的逻辑关系开辟额外的开销 4>表的大小固定不可随意改变 5>插入删除需要移动大量元素(平均移动一半元素)
/*返回线性表第i个元素的值 *在线性表第i个元素之前插入元素 *删除线性表第i个元素 *打印线性表所有的元素*/#include <stdio.h>#include <stdlib.h>#define MAXLINE 100//结构体为数组申请好大小为MAXLINE的空间typedef struct{ int array[MAXLINE]; int length;}sqlist;//创建顺序表//main 函数中定义了指向顺序表的指针变量sqlist *//修改指针变量内容传指针变量的地址,确 //保在此子函数中生成的顺序表返回到主函数中仍能找到它 //子函数传入地址才能成功改变地址对应的的值void creatlist(sqlist **s) { int i=0,n=0; printf("input the length of list\n"); scanf("%d",&n); printf("input the elements of the list\n"); for(i=0;i<n;++i) { scanf("%d",&(*s)->array[i]); } (*s)->length = n;}//初始化数据表 1,2,3,4,5void sq_init(sqlist *s){ int i = 0; for(i = 0;i < 15;++i) { s->array[i] = i; s->length++; }}//传线性表的地址效率高 第i个元素之前插入void sq_insert(sqlist *s,int i,int a){ if(s->length > MAXLINE) { return; } int j=s->length; for(j = s->length;j > i-2; --j) { s->array[j+1] = s->array[j]; } s->array[++j] = a; s->length++;}void sq_print(sqlist *s){ int i = 0; for(i = 0;i < s->length;++i) { printf("%d ",s->array[i]); if((i+1) % 10 == 0) { printf("\n"); } } printf("\n");}//a存放待删除元素的值void sq_delect(sqlist *s,int i,int *a){ int j=0; *a = s->array[i-1]; for(j = i;j < s->length;++j) { s->array[j-1] = s->array[j]; } s->length--;}//a存放查找到的第i个元素的值void sq_search(sqlist *s,int i,int *a){ if(i > s->length) { return; } *a = s->array[i-1];}int main(){ int a,i = 0; //sqlist test ; sqlist *s = NULL; // test.length = 0; //*s = test 此句意思为S为空指针,S指向的内容与test内容相同 //s = &test; creatlist(&s); //sq_init(s); sq_print(s); sq_insert(s,4,10); sq_print(s); sq_delect(s,4,&a); sq_print(s); printf("%d\n",a); sq_search(s,4,&a); sq_print(s); printf("%d\n",a); return 0;}
顺序表应用:
/*线性表应用:图书馆借书管理系统相关功能*///单本书-图书信息结构体#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXLINE 100#if 1typedef struct{ char no[8],name[10]; //书号,书名 int newnum,sumnum; //书的现存量 ,总量 int price; //单价}Datatype;//定义包含图书顺序表元素结构体typedef struct{ Datatype data[MAXLINE + 1]; int len;}SeqList;SeqList * init_Seq(void){ SeqList *l =NULL; l = (SeqList *)malloc(sizeof(SeqList)); //判断是否申请 return l;}void input(SeqList *l){ int i = 0; printf("输入书的总类数\n"); scanf("%d",&l->len); for(i = 0;i <l->len; ++i) { scanf("%s%s%d%d%d",&l->data[i].no,&l->data[i].name,&l->data[i].newnum, &l->data[i].sumnum,&l->data[i].price); }}void print(SeqList *l){ int i = 0; for(i = 0;i< l->len; ++i) { printf("%s %s %d %d %d\n",l->data[i].no,l->data[i].name, l->data[i].newnum,l->data[i].sumnum,l->data[i].price); }}void rent(SeqList *l){ int i = 0; char array[10]; printf("输入要借书名:\n"); scanf("%s",&array); for(i = 0;i < l->len;++i) { if(strcmp(l->data[i].name,array) == 0) { if(l->data[i].newnum > 0){ l->data[i].newnum--; }else{ printf("已借空\n"); } break; } }}void del(SeqList *l){ int j = 0,i = 0; char array[10]; printf("输入要删除的书名:\n"); scanf("%s",&array); for(j = 0;j < l->len;++j) { if(strcmp(l->data[j].name,array) == 0) { i = j; } } for(i = i+1;i<l->len;++i) { l->data[i-1] = l->data[i]; } l->len--;}//图书种类的删除:l->len-1//void deletAll(SeqList **l){ free(*l); l = NULL;}int main(int argc,char **argv){ SeqList *l = NULL; l = init_Seq(); input(l); rent(l); print(l); del(l); print(l); deletAll(&l); return 0;}#endif
顺序表的相关算法:
1.顺序表逆置 a1 a2 a3 a4 a5 a6 …. an
void Covert(SeqList *l){ int i,n; int x; n = l->len; for(i = 1;i < n/2;i++) { x = l->data[i]; l->data[i] = l->data[n-i+1]; l->data[n-i+1] = x; }}
2.有序顺序表A,B 合并成顺序表C,使得C依然有序
(方法:创建新的顺序表C)
0 0
- 数据结构之 顺序表
- 数据结构--顺序线性表
- 数据结构---顺序表
- 数据结构之顺序表
- 数据结构顺序表
- 数据结构顺序表
- 顺序表(数据结构)
- 数据结构之顺序表
- 数据结构之顺序表
- 数据结构笔记--顺序表
- 【数据结构】顺序表
- 数据结构《顺序链表》
- 数据结构之顺序表
- 数据结构试验 顺序表
- 数据结构--顺序表
- 数据结构--顺序表
- 数据结构之顺序表
- 基本数据结构:顺序表
- HDOJ -- 1596 find the safest road
- 《牛客面试算法题精讲第二季》专题3
- windows下多线程学习笔记3--ffmpeg两路视频解码
- hdu5795 博弈
- Qt应用远程连接SQL Server
- 数据结构 - 顺序表
- oracle-行转列点评oracle11g sql新功能pivot/unpivot
- 使用百度地图时一个小误区, "_OBJC_CLASS_$_BMKMapManager", referenced from:
- ※ Leetcode - Array - 88. Merge Sorted Array(快速归并两个有序数组)
- 如何理解C语言数组
- yii 语言的设置
- 软链接
- opencv 3.0 DPM cascade contrib模块
- HDU 5137 How Many Maos Does the Guanxi Worth(最短路--dijkstra)