顺序表

顺序表
// copyright of matter . 2014-9-29 //

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<algorithm>
#define INCREMENT 10
#define LIST_INIT_SIZE 100
using 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);
}//初始化S3
int 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值