数据结构:顺序表实例--将两个升序排列的线性表A和B合并集为一个有序排列的线性表C,用顺序表实现。

#include <stdio.h>
#include <stdlib.h>
#define DataType int      //此处假设顺序表的元素基类型为int
#define MAXSIZE 50        //此处假设顺序表的最大元素个数为50
typedef struct List
{
  DataType data[MAXSIZE]; //用一维数组存储顺序表元素
  int size;                //线性表的长度 
}SeqList;

void InitList(SeqList *p)
{ 
    p->size=0;
} 

int  Locate(SeqList *p, DataType e)
{
  int i=0;
  while(i<p->size&&p->data[i]!=e)
  {
  i++;
  }
  if(i==p->size)
    return 0;
  else
    return(i+1);
}

void InsertList(SeqList *p,int i,DataType e)//插入 
{
    int j;
    if(i<1||i>p->size+1)
        printf("插入位置不正确");
    else
    {   
	    p->size++;
        for(j=p->size-1;j>=i;j--)//此处的size已是修改后的新值
           p->data[j]=p->data[j-1];
           p->data[i-1]=e;
    }
}
void  DeleteList(SeqList *p,int i) //其实删除的是下标i-1的元素
{
     int j ;
     if (i<1|| i>p->size)
     printf( "删除位置不正确!!");
       else
     { 
       for(j=i-1;j<p->size-1;j++)
       p->data[j]=p->data[j+1];
       p->size--;
     }
}
void Display(SeqList *p)//输出顺序表 
{  
   int j;
   if(p->size==0) 
       printf("表为空表!\n");
   else
      for(j=0;j<p->size;j++)
        printf("%d ",p->data[j]);
}
void Bubble(SeqList *p)//升序冒泡 
{
	int i,j;
	int t;
	for(i=0;i<p->size-1;i++)
	  for(j=i+1;j<p->size;j++)
	     if(p->data[j]<p->data[i])
	    {
		t=p->data[i];
		p->data[i]=p->data[j];
		p->data[j]=t;
	    } 
}
void Bubbles(SeqList *p)//降序冒泡 
{
	int i,j;
	int t;
	for(i=0;i<p->size-1;i++)
	  for(j=i+1;j<p->size;j++)
	     if(p->data[j]>p->data[i])
	    {
		t=p->data[i];
		p->data[i]=p->data[j];
		p->data[j]=t;
	    } 
}
int main()
 {
	SeqList A={{0,2,4,6,7,9},5},B={{0,1,5,7,8},4},C;  //第一个位置不用,然后花括号外面是表长 
	int i,j;
	InitList(&C);
	for(i=1;i<=A.size;i++)
		InsertList(&C,i,A.data[i]);
	for(j=1;j<=B.size;j++)
		if(Locate(&A,B.data[j])==0)
				InsertList(&C,i++,B.data[j]);
	Display(&C);
	printf("表长=%d\n",C.size);
	printf("\n");
	printf("升序排列:");
    Bubble(&C);
	Display(&C);
	printf("\n降序排列:");
    Bubbles(&C);
	Display(&C);			
    return  0;   
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值