#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;
}
数据结构:顺序表实例--将两个升序排列的线性表A和B合并集为一个有序排列的线性表C,用顺序表实现。
于 2022-12-11 14:58:15 首次发布