顺序表
来源:互联网 发布:java web三大框架 书籍 编辑:程序博客网 时间:2024/05/04 09:44
顺序表// copyright of matter . 2014-9-29 //#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<algorithm>#define INCREMENT 10#define LIST_INIT_SIZE 100using namespace std;/*结构体*/typedef struct {int *element;int Length;int Listsize;}sqllist; /*函数声明区域*/bool initSqlist(sqllist &S1);//初始化 bool insertSqlist(sqllist &S1,int i,int e);//插入 void foreachSqlist(sqllist &S1);//遍历bool deleSqlist(sqllist &S1, int i, int &e);//删除 bool MergeList(sqllist S1, sqllist S2, sqllist &S3);////合并两个非降序线性表到Lc中/*-------------*/int main(){ sqllist L1,L2,L3; int val,i,Node,temp; if(initSqlist(L1)&&initSqlist(L2))//对两个线性表初始化 { printf("线性表创建成功!\n"); } else { printf("线性表创建失败!\n"); } printf("对L1表进行初始插入操作..\n"); for(i=0;i<5;++i)//尝试对L1进行初始化插入操作 { printf("请输入插入第%d的值val=",i+1); scanf("%d",&val); insertSqlist(L1,i,val); } printf("对L2表进行初始插入操作..\n"); for(i=0;i<5;++i)//尝试对L2进行初始化插入操作 { printf("请输入插入第%d的值val=",i+1); scanf("%d",&val); insertSqlist(L2,i,val); } //遍历输出 printf("遍历输出L1为..\n"); foreachSqlist(L1); printf("\n遍历输出L2为..\n"); foreachSqlist(L2); //尝试对L1进行删除节点操作 printf("\n请输入要删除节点Node="); scanf("%d",&Node); if(deleSqlist(L1,Node-1,temp))//L1是表名,Node是下标,temp是临时存放删除值的变量 { printf("删除成功!,您成功删除了第%d节点的值,其值为%d",Node,temp); }else{ printf("删除失败!"); exit(-1); } printf("删除节点后遍历输出L1为..\n"); foreachSqlist(L1); printf("\n"); //把L1,L2合并两个非降序线性表到L3中 MergeList(L1,L2,L3); //在把L3遍历 printf("合并后L3遍历输出:"); foreachSqlist(L3); return 0; }/*初始化顺序表,返回bool值*/ bool initSqlist(sqllist &S1){ S1.element=(int*)malloc(sizeof(int)*LIST_INIT_SIZE);//malloc动态分配内存 if(!S1.element) { return false; exit(-1); }//完备性,若分配内存失败,则返回false,并退出程序 S1.Listsize=LIST_INIT_SIZE;//初始存储容量 S1.Length=0;//初始线性表长度为0 return true;}bool insertSqlist(sqllist &S1,int i,int e){ if(i<0||i>S1.Length) return false;//完备性,i不合法 if(S1.Length == S1.Listsize){ S1.element = (int *) realloc(S1.element, sizeof(int) * (S1.Listsize += INCREMENT)); if(!S1.element) return false; } //额外增加空间 for(int j = S1.Length - 1; j >= i; --j) S1.element[j + 1] = S1.element[j]; S1.element[i] = e; ++S1.Length; return true;}void foreachSqlist(sqllist &S1){for(int i=0;i<S1.Length;++i){printf("%d ",S1.element[i]);} return;}bool deleSqlist(sqllist &S1, int i, int &e){ if(i<0||i>S1.Length){ return false; }//完备性 e=S1.element[i]; for(int j=i;j<S1.Length;++j) S1.element[j]=S1.element[j+1]; --S1.Length; return true;}bool MergeList(sqllist S1, sqllist S2, sqllist &S3){ sort(S1.element, S1.element + S1.Length);//先对S1,和S2进行排序 sort(S2.element, S2.element + S2.Length);/*for(int i=0;i<S1.Length;++i){printf("%d",S1.element[i]);}*///测试排序S3.Length=0; S3.Listsize=LIST_INIT_SIZE;S3.element=(int*)malloc(sizeof(int)*S3.Listsize);if(!S3.element){return false;exit(-1);}//初始化S3int pa=0,pb=0,pc=0;while(pa < S1.Length && pb < S2.Length) { if(S1.element[pa] < S2.element[pb]) insertSqlist(S3, pc++, S1.element[pa++]); else insertSqlist(S3, pc++, S2.element[pb++]); } while(pa<S1.Length) { insertSqlist(S3, pc++, S1.element[pa++]); } while(pb<S2.Length) { insertSqlist(S3, pc++, S2.element[pb++]); } return true;}
0 0
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- ffmpeg数据结构-AVFormatContext
- 实习生,怎样才算优秀?
- 设计网页时IE6中10个不得不注意的问题
- 指针数组和数组指针的区别
- addToBackStack使用和Fragment执行流程
- 顺序表
- 实用的复选框操作——15分钟解决90%以上的javascript复选框操作
- 嵌入式Linux系统网络的配置
- shell实例浅谈之十二批量解压zip文件
- Spark-MapReduce编程-自连接(Scala)
- html中select只读显示
- layout_weight的作用以及意义
- 开发者招募—友盟“开发数据无线潜能”2014发布会
- Linux进程的状态转换图