线性表的基本操作

来源:互联网 发布:java 获取post还是get 编辑:程序博客网 时间:2024/05/16 09:43
#include<iostream>using namespace std;#define LIST_INIT_SIZE 100#define LIST_INCREMENT 10#define OVERFLOW -1#define ERROR 0#define OK 1#define TRUE 1#define FALSE 0typedef int Elemtype;typedef int Status;struct SqList{Elemtype *elem;int length;int listsize;};//初始化线性表Status Init_List(SqList &L){L.elem = (Elemtype *)malloc(sizeof(Elemtype) * LIST_INCREMENT);if(!L.elem)exit(OVERFLOW);L.length = 0;L.listsize = LIST_INIT_SIZE;return OK;}//销毁线性表Status Destroy(SqList &L){free(L.elem);L.length = L.listsize = 0;return OK;}//线性表非空判断Status Empty(SqList L){if(L.length == 0)return TRUE;elsereturn FALSE;}//取线性表中第i个元素Status GetElem(SqList L,int i,Elemtype &e){if(i < 1 || i > L.length)return ERROR;else{e = *(L.elem + i -1);return OK;}}//在线性表第i个位置前插入元素eStatus Insert(SqList &L,int i,Elemtype e){Elemtype *newbase,*p,*q;if(i < 1 || i > L.length + 1)return ERROR;if(L.length >= L.listsize){newbase = (Elemtype *)realloc(L.elem,(L.listsize + LIST_INCREMENT) * sizeof(Elemtype));//重新分配基址if(!newbase)return ERROR;L.elem = newbase;L.listsize += LIST_INCREMENT;}q = &(L.elem[i - 1]);for(p = &(L.elem[L.length -1]); p >= q; --p)*(p + 1) = *p;//插入位置及之后的元素后移*q = e;++L.length;return OK;}//删除线性表中第i个元素,并用e返回其值Status Delete(SqList &L,int i,Elemtype &e){Elemtype *p,*q;if(i < 1 || i > L.length)return ERROR;p = &(L.elem[i - 1]);e = *p;q = L.elem + L.length -1;//q为表尾地址for(++p;p <= q; ++p)//被删除之后的元素左移*(p - 1) =* p;--L.length;//表长减一return OK;}//有序线性表的合并Status MergeList(SqList La,SqList Lb, SqList &Lc){Elemtype *pa,*pb,*pc,*pa_last,*pb_last;pa = La.elem;pb = Lb.elem;Lc.length = Lc.listsize = La.length + Lb.length;pc = Lc.elem = (Elemtype *)malloc(Lc.listsize * sizeof(Elemtype));if(!pc)return ERROR;pa_last = La.elem + La.length - 1;pb_last = Lb.elem + Lb.length - 1;while(pa <= pa_last && pb <= pb_last){if(*pa <= *pb) *pc++ = *pa++;else*pc++ = *pb++;}while(pa <= pa_last) *pc++ = *pa++;while(pb <= pb_last) *pc++ = *pb++;}int main(){SqList L,La,Lb,Lc;int E[6];Init_List(L);Init_List(La);Init_List(Lb);Init_List(Lc);int Dele;for(int i = 1; i < 6; i++)Insert(L,1,i);for(int i = 1; i < 6; i++)cout<<*(L.elem+i-1)<<" ";cout<<endl;for(int i = 1; i < 6; i++)GetElem(L,i,E[i]);for(int i = 1; i < 6; i++)cout<<E[i]<<" ";cout<<endl;Delete(L,2,Dele);cout<<"删除元素"<<Dele<<endl;cout<<"删除后线性表为:"<<endl;for(int i = 1; i < 5; i++)cout<<*(L.elem+i-1)<<" ";cout<<endl;//以下测试线性表合并:cout<<"以下测试线性表合并"<<endl;for(int i = 5; i > 0; i--)Insert(La,1,i);for(int i = 1; i < 6; i++)cout<<*(La.elem+i-1)<<" ";cout<<endl;for(int i = 7; i > 2; i--)Insert(Lb,1,i);for(int i = 1; i < 6; i++)cout<<*(Lb.elem+i-1)<<" ";cout<<endl;MergeList(La,Lb,Lc);for(int i = 1; i < 11; i++)cout<<*(Lc.elem+i-1)<<" ";cout<<endl;Destroy(L);return 0;}

0 0
原创粉丝点击