【数据结构】线性表
2017-03-20 20:17
274 查看
【1】定义
线性表是信息表的一种形式,表中数据元素之间满足线性关系(或线性结构), 是一种最基本、最简单的数据结构类型。
【2】线性表的特征:
1) 对非空表,a0是表头,无前驱; 2) an-1是表尾,无后继; 3) 其它的每个元素ai有且仅有一个直接前驱(ai-1)和一个直接后继(ai+1)。
【3】线性表的顺序存储(顺序表)的实现
#include <stdio.h> #include <stdlib.h> #define MAX 64 typedef int datatype_t; struct sqlist { datatype_t data[MAX]; int last; }; struct sqlist *sqlist_creat() { struct sqlist* sl; sl=(struct sqlist*)malloc(sizeof(struct sqlist)); sl->last=-1; return sl; } int sqlist_empty(struct sqlist* sl) { if(sl->last==-1) return 1; return 0; } int sqlist_full(struct sqlist* sl) { if(sl->last==MAX-1) return 1; return 0; } datatype_t sqlist_delete_by_pos(struct sqlist* sl,int pos) { if(sqlist_empty(sl)||pos<0||pos>sl->last) { printf("wrong pos\n"); return -1; } int i=pos; datatype_t d=sl->data[pos]; while(i<sl->last) { sl->data[i]=sl->data[i+1]; i++; } sl->last--; return d; } void sqlist_delete_by_data(struct sqlist* sl,datatype_t d) { int cnt=0; int i; for(i=0;i<=sl->last;i++) { if(sl->data[i]==d) cnt++; sl->data[i]=sl->data[i+cnt]; } sl->last-=cnt; } void sqlist_insert(struct sqlist* sl,datatype_t d) { if(sqlist_full(sl)==1) { printf("full\n"); return; } sl->last++; sl->data[sl->last]=d; } void sqlist_insert_by_pos(struct sqlist *sl,int pos,datatype_t d) { if(pos>sl->last+1) { printf("wrong position\n"); return; } sl->last++; int i=sl->last; while(i!=pos) { sl->data[i]=sl->data[i-1]; i--; } sl->data[i]=d; } datatype_t sqlist_delete(struct sqlist* sl) { datatype_t d=sl->data[sl->last]; sl->last--; return d; } int sqlist_search_by_data(struct sqlist* sl,datatype_t d) { int i; for(i=0;i<=sl->last;i++) { if(sl->data[i]==d) return i; } return -1; } datatype_t sqlist_search_by_pos(struct sqlist* sl,int pos) { if(pos>sl->last) { printf("wrong position\n"); return -1; } return sl->data[pos]; } void sqlist_modify_by_data(struct sqlist* sl,datatype_t pre,datatype_t new) { int i; for(i=0;i<=sl->last;i++) { if(sl->data[i]==pre) sl->data[i]=new; } } void sqlist_modify_by_pos(struct sqlist* sl,datatype_t new,int pos) { if(pos>sl->last) { printf("wrong position\n"); return; } sl->data[pos]=new; } void sqlist_show(struct sqlist* sl) { int i; for(i=0;i<=sl->last;i++) printf("%d ",sl->data[i]); putchar(10); } void sqlist_union(struct sqlist* s1,struct sqlist* s2) { int flag; int i; datatype_t tmp; for(i=0;i<=s2->last;i++) { tmp=sqlist_search_by_pos(s2,i); flag=sqlist_search_by_data(s1,tmp); if(flag==-1) sqlist_insert(s1,tmp); } } int main() { struct sqlist* s1,*s2; s1=sqlist_creat(); s2=sqlist_creat(); sqlist_insert(s1,1); sqlist_insert(s1,2); sqlist_insert(s1,3); sqlist_insert(s1,4); sqlist_insert(s1,5); sqlist_insert(s2,6); sqlist_insert(s2,7); sqlist_insert(s2,2); sqlist_insert(s2,9); sqlist_insert(s2,10); sqlist_union(s1,s2); sqlist_show(s1); free(s1); free(s2); return 0; }
相关文章推荐
- 数据结构 线性表 顺序表的交集
- 数据结构线性表
- 数据结构 第二章线性表 思维导图
- 企业级数据结构-线性表顺序存储
- 数据结构-线性表错题集锦
- 数据结构 - 线性表
- 整理--数据结构--线性表
- 【Java数据结构】线性表
- 数据结构-线性表
- 002数据结构练习-线性表
- 数据结构第二章--线性表链表
- 数据结构-线性表-其他运算
- 2-6-静态链表-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- 数据结构与算法——线性表链式存储(双向循环链表)
- 【数据结构】线性表(数组实现)
- 数据结构快速回顾——开篇 线性表
- 数据结构 第二章 线性表(2)malloc和realloc内存分配问题
- 数据结构和算法 (二)数据结构基础、线性表、栈和队列、数组和字符串
- 数据结构--线性表详解(一)
- 数据结构---线性表----顺序存储结构