顺序表

来源:互联网 发布: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
原创粉丝点击