线性表之顺序存储结构
2016-04-15 10:28
411 查看
线性表的顺序存储是指用一组地址连续的存储单元一次存储线性表的数据元素。在C语言中,可以使用动态数组来实现线性表的顺序存储。
定义:
#define MAXSIZE 100 typedef struct node{ //线性表结构定义 int data[MAXSIZE]; //线性表数据 int length; //长度 }List,*PList;
初始化:
Plist init_list() { Plist pl; pl=(PList)malloc(sizeof(List)); if(pl) pl->length=0; return pl; }
生成线性表:
void creat_list(PList pl,int a[],int n) { int len,i; len=pl->length; for(i=0;i<n;i++) if(len+i<MAXSIZE) { pl->data[len+i]=a[i]; pl->length++; } }
查找元素:
int locate_L(List l,int x) { int i=0; while(i<L.length && L.data[i] !=x) i++; if(i>=L->length )</span> retutn 0; else return(i+1); }
插入元素:插入元素时会可能会改变线性表的首地址,所以应用地址作形形参
int insert_L(List &L,int i,int x) //用线性表L的地址作形参 { int j; if(!&L) { printf ("表不存在"); return(-2); } if (L.length >=MAXSIZE ) { printf ("表溢出"); return(-1); } if (i<1||i>L.length +1) { printf ("插入位置不合法"); return(-1); } for(j=L.length-1;j>i;j--) L.data[j+1]=L.data [j]; L.data[i-1]=x; L.length++; return(1); }
删除元素:在地址可能改变时也可采用指针传递
int delete_L(PList pl,int i) //用线性表指针作形参 { int j; if(!pl) { printf ("表不存在"); return(-2); } if(i<1||i>pl->length ) { printf("删除位置不合法"); return (-2); } for(j=i-1;j<pl->length ;j++) pl->data [j]=pl->data [j+1]; pl->length --; return (-1); }
求两个线性表的交集和并集:A∩B、A∪B
void inter_merge(PList La,PList Lb,int m) { int i; for(i=0;i<La->length ;i++) { if(!locate_L (Lb,La->data [i]) && m) //m=1 时求A与B的交集,将A在B中不存在的元素删除,最后A=A∩B delete_L (La,i+1); if(!locate_L (Lb,La->data [i]) && !m) //m=0 时求A与B的并集,将A在B中不存在的元素插入B,最后B=A∪B insert_L (*Lb,Lb->length+1 ,La->data [i]); } }
应用
void main() { int i; int a[5]={1,2,3,4,5}; PList pl1,pl2; pl1=init_L ();//初始化 pl2=init_L (); create_L (pl1,a,5);//生成 create_L (pl2,a,5); insert_L(*pl1,1,6);//在线性表pl1的位置1插入元素6 delte_L(pl2,2);//删除线性表pl2在位置2的元素 inter_merge(pl1,pl2,1);//求两个线性表的交集,结果存在pl1中 for(i=0;i<pl1->length;i++) printf("%d\t",pl1->data[i]);//结果应为1 3 4 5 }
相关文章推荐
- linux 如何设置进程所能打开的最大文件描述符个数
- iOS arc(自动释放)和mrc(手动释放)下重写set方法
- leetcode26题 题解 翻译 C语言版 Python版
- kernel的红色波浪线
- oauth:password
- 软考高项学员:2016年4月13日作业
- setuptools升级7+引发的错误
- Android Gradle插件(plugin)版本(version)与Gradle、SDK Build Tools版本关系
- The String Constant Pool
- java.lang.ClassNotFoundException: org.apache.taglibs.standard.tlv.JstlCoreTLV
- 关于ClientScriptManager.RegisterForEventValidation
- Java中Set的contains()方法
- Activity和Fragment的生命周期,以及对比
- 内存优化
- 【LeetCode】99. Recover Binary Search Tree 分析、解法、注释、中序遍历、递归
- shell编程基础------函数
- ios程序不同状态下,调用的代理方法
- OC 下载数据 与请求登录 NSURLSession的使用
- UI/UE/ID/UED/UCD的区别
- 32 对齐算法