线性表
来源:互联网 发布:剑三莫雨捏脸数据截图 编辑:程序博客网 时间:2024/06/07 03:02
线性表的操作
- 建立新的线性表
- 给线性表赋初始值
- 删除表中某个元素
- 将某个元素插入表中
- 将两个顺序表进行升序合并
可运行代码如下:
/* Name: 线性表 Copyright: Author: Anderson Date: 04/09/17 20:48 Description: linear_list; */#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;//头文件 #define TRUE 1#define FALSE 0#define OK 1#define ERROR 0 #define INFEASIBLE -1#define OVERFLOW -2#define LIST_INIT_SIZE 100//线性表初始空间分配量 #define LISTINCREMENT 10//线性表空间分配的增量//宏定义 typedef int Status;typedef int ElemType;//定义类型 typedef struct LNode{ ElemType *elem;//储存空间的基地址 int length;//当前的长度 int listsize;//当前分配的储存容量 }SqList;//结构体 Status initList(SqList &L,int length)// 构造空的线性表 { L.elem =(ElemType *)malloc(length *sizeof(ElemType));//动态分配储存空间 if(!L.elem ) exit (OVERFLOW);//如果 分配失败,退出 L.length =0;//初始长度为0; L.listsize =length;//初始储存容量为100; return OK;}Status insertList(SqList &L,ElemType e,int i)//插入操作,在第i位置 { ElemType *p,*q; if(i<1||i>L.length+1 )//判断i的正确性 return ERROR;//不正确就结束 if(L.length >=L.listsize) { ElemType *newbase=(ElemType *)realloc(L.elem ,(L.listsize +LISTINCREMENT)*sizeof(ElemType)); if(!newbase) exit(OVERFLOW);//分配失败 L.elem =newbase;//成功后,分配新基值 L.listsize +=LISTINCREMENT;//增加储存容量 } q=&L.elem [i];//q 为插入的位置 for(p=&(L.elem [L.length]);p>=q;--p) { *(p+1)=*(p); } *q=e; ++L.length; return OK;}Status deleteListElem(SqList &L,int i,ElemType &e){ int *p,*q; if(i<1||i>L.length ) return ERROR; q=&L.elem [i]; e=*q; for(p=q;p<(L.elem +L.length);p++) { *(p)=*(p+1); } L.length--; return OK;}void mergeList(SqList La,SqList Lb,SqList &Lc){ ElemType *pa,*pb,*pc; Lc.listsize =La.length+Lb.length; initList(Lc,Lc.listsize ); Lc.length =Lc.listsize ; pc=Lc.elem +1; pa=La.elem +1; pb=Lb.elem +1; while(pa<=&La.elem [La.length ]&&pb<=&Lb.elem [Lb.length]) { if(*pa<=*pb) *pc++=*pa++; else *pc++=*pb++; } while(pa<=&La.elem [La.length ]) *pc++=*pa++; while(pb<=&Lb.elem [Lb.length ]) *pc++=*pb++;}int cmp(int x,int y){ return x==y;}int Locate(SqList L,ElemType e,Status(*compare)(ElemType,ElemType)){ int i=0; ElemType *p; p=L.elem ; while(i<=L.length &&!(*compare)(*p++,e)) ++i; if(i<L.length )return i; else return 0;}void printList (SqList L,int p){ if(p==1) { printf("当前值:"); for(int i=1;i<=L.length ;i++) { printf("%d ",*(L.elem +i)); } printf("\n"); } else if(p==2) { printf("删除后:"); for(int i=1;i<=L.length ;i++) { printf("%d ",*(L.elem +i)); } printf("\n"); } else if(p==3) { printf("插入后:"); for(int i=1;i<=L.length ;i++) { printf("%d ",*(L.elem +i)); } printf("\n"); } else if(p==4) { printf("顺序表合并:"); for(int i=1;i<=L.length ;i++) { printf("%d ",*(L.elem +i)); } printf("\n"); }}main(){ SqList La,Lb,Lc; ElemType e; int init,i; init=initList(La,LIST_INIT_SIZE); int data[6]={1,2,3,4,5,6}; for(i=0;i<6;i++) { insertList(La,data[i],i+1); } printf("LA:\r\n"); printList(La,1); deleteListElem(La,6,e); printList(La,2); insertList(La,e,6); printList(La,3); printf("LB:\r\n"); initList(Lb, LIST_INIT_SIZE); int Bdata[5] = {5,6,7,8,9}; for (i=0; i<5;i++) { insertList(Lb, Bdata[i], i+1); } printList(Lb,1); mergeList(La, Lb, Lc); printList(Lc,4); printf("locate==%d\n",Locate(Lc,4,cmp));}
阅读全文
0 0
- 线性表--线性存储
- 线性表 线性结构
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- UVA
- Struts2之多文件下载
- Linux
- Noip2011 Day2 T2 聪明的质监员 (二分+前缀和)
- 20170912_字符串长度strlen实现
- 线性表
- java中的装饰者模式
- 链表面试题精讲
- mongDB使用小技巧
- How to Switchover&Failover in DataGuard-11G
- 深度学习在OCR中的应用
- jQuery callback源码分析
- 高斯消元(Gauss elimination)的算法实现
- 调试——Debug