1、输入一组整型元素序列,建立顺序表。
2、实现该顺序表的遍历。
【数据结构->顺序表的操作】3、在该顺序表中进行顺序查找某一元素,查找成功返回1,否则返回0。
4、判断该顺序表中元素是否对称,对称返回1,否则返回0。
5、实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。
6、输入整型元素序列利用有序表插入算法建立一个有序表。
7、利用算法6建立两个非递减有序表并把它们合并成一个非递减有序表。
8、编写一个主函数,调试上述算法。
#include
#include
typedef int ElemType;
#define maxn 100000
//const int maxn=10000;
typedef struct node
{
ElemType data[maxn];
int length;
}Seqlist;
Seqlist* cj(Seqlist *L)
{
int t;
scanf("%d",&t);
int i=0;
while(t!=-1)
{
L->data[i++]=t;
L->length++;
scanf("%d",&t);
if(L->length>maxn)
{
printf("该表已满\n");
return 0;
}
}
return L;
}
void bl(Seqlist *l)
{
int i=0;
for(;
ilength;
i++)
printf("%d ",l->data[i]);
puts("");
}
int cz(Seqlist *l,int t)
{
int i=0;
for(;
ilength;
i++)
{
if(l->data[i]==t)
return 1;
}
return 0;
}
int dc(Seqlist *l)
{
int i=0;
int j=(l->length)-1;
while(l->data[i]==l->data[j])
{
i++;
j--;
if(j<=i)
return 1;
}
return 0;
}
void jh(Seqlist *l)
{
int i=0;
int j=(l->length)-1;
while(idata[i]%2==0&&l->data[j]%2==1)
{
int t;
t=l->data[i];
l->data[i]=l->data[j];
l->data[j]=t;
i++;
j--;
}
else if(l->data[i]%2==0&&l->data[j]%2==0)
{
j--;
}
else if(l->data[i]%2==1&&l->data[j]%2==1)
{
i++;
}
else
{
i++;
j--;
}
}
}
Seqlist* cr(Seqlist *l)
{
int t;
scanf("%d",&t);
int i=0;
while(t!=-1)
{
l->length++;
if(i==0)
l->data[i++]=t;
else
{int j=0;
while(l->data[j]<=t)
{
j++;
}
int k;
for(k=l->length-1;
k>=j;
k--)
l->data[k+1]=l->data[k];
l->data[j]=t;
// bl(l);
}
scanf("%d",&t);
if(l->length>maxn)
{
printf("该表已满\n");
return 0;
}
}
return l;
}
Seqlist* hb(Seqlist *a,Seqlist *b,Seqlist *h)
{
int i=0,j=0,k=0;
while(ilength&&jlength)
{
if(a->data[i]data[j])
{
h->data[k++]=a->data[i];
h->length++;
i++;
}
else
{
h->data[k++]=b->data[j];
h->length++;
j++;
}
}if(i!=a->length-1)
while(ilength)
{ h->data[k++]=a->data[i++];
h->length++;
}
if(j!=b->length-1)
while(jlength)
{
h->data[k++]=b->data[j++];
h->length++;
}return h;
/* //合并 短向长合并
if(a->length>b->length)
{
while(jlength)
{
int s=0;
while(a->data[s]data[j])
{
s++;
}
int k;
for(k=a->length-1;
k>=s;
k--)
a->data[k+1]=a->data[k];
a->data[s]=b->data[j];
a->length++;
j++;
}
return a;
}
else
{
while(jlength)
{
int s=0;
while(b->data[s]data[j])
{
s++;
}
int k;
for(k=b->length-1;
k>=s;
k--)
b->data[k+1]=b->data[k];
b->data[s]=a->data[j];
b->length++;
// bl(b);
j++;
}
return b;
}*/
}
int main()
{
Seqlist *h,*tt1,*tt2;
h=(Seqlist *)malloc(sizeof(Seqlist));
h->length=0;
h=cj(h);
bl(h);
printf("查询1的结果为 %d\n",cz(h,1));
printf("查询10的结果为 %d\n",cz(h,10));
printf("查询对称的结果为 %d\n",dc(h));
jh(h);
printf("奇数在前 偶数在后 的结果为 ");
bl(h);
puts("");
Seqlist *tt3=(Seqlist *)malloc(sizeof(Seqlist));
tt1=(Seqlist *)malloc(sizeof(Seqlist));
tt1=cr(tt1);
printf("非递减有序顺序表1: ");
bl(tt1);
tt2=(Seqlist *)malloc(sizeof(Seqlist));
tt2=cr(tt2);
printf("非递减有序顺序表2: ");
bl(tt2);
printf("合并后顺序表");
bl(hb(tt1,tt2,tt3));
return 0;
}
推荐阅读
- 链表|栈和队列(跑路人笔记)
- 链表|顺序表代码实现(跑路人笔记)
- 数据结构|js实现二叉树根节点到所有叶子节点组成的路径数字之和
- 算法与数据结构|Leetcode0720. 词典中最长的单词(simple)
- 面试|HashMap常问的11个面试题 你会几个
- STL中map和set详解
- 数据结构|PTA查找—二叉搜索树的删除操作
- 算法|PTA查找—构造二叉检索树
- 数据结构|PTA线性表—统计字母比例