(1)顺序表的操作
① 输入一组整型元素序列,建立线性表的顺序存储结构。
② 实现该线性表的遍历。
③ 在该顺序表中查找某一元素,查找成功显示查找元素,否则显示查找失败。
④ 在该顺序表中删除或插入指定元素。
⑤ 建立两个按值递增有序的顺序表,将他们合并成一个按值递增有序的顺序表。
#include <stdio.h>
#include <stdlib.h>
#define Length 100
#define SizeLength 50
typedef struct{
int *elem;
int length;
int sizelist;
}SqList;
void InitList(SqList &L)
{//建立一个新表
int n,i;
L.elem=(int *)malloc(sizeof(int)*Length);
if(!L.elem)
{
printf("建立失败.\n");
exit(0);
}
L.sizelist=Length;
printf("数据个数:");
scanf("%d",&n);
printf("请输入数据:");
for(i=0;i<n;i++)
scanf("%d",&L.elem[i]);
L.length=n;
printf("建立成功.\n");
}
void DisplayList(SqList L)
{//遍历,显示
int i;
for(i=0;i<L.length;i++)
printf("%d ",L.elem[i]);
putchar('\n');
}
void SearchList(SqList L,int e)
{//查找操作
int i;
for(i=0;i<L.length;i++)
{
if(L.elem[i]==e)
{
printf("元素%d是第%d个元素。\n",e,i+1);
return ;
}
}
printf("查找失败.\n");
}
void DeleteList(SqList &L,int j)
{//删除第j个元素
int i;
if(j<=0 || j>L.length)
{
printf("输入位置非法.\n");
return ;
}
for(i=j-1;i<L.length-1;i++)
L.elem[i]=L.elem[i+1];
L.length--;
}
void InsertList(SqList &L,int i,int e)
{//将数据e插入到第i个元素的前面
if(i<=0 || i>L.length)
{
printf("输入位置非法.\n");
return ;
}
if(L.length+1>L.sizelist)
realloc(L.elem,L.sizelist+SizeLength);
for(int j=L.length;j>=i;j--)
L.elem[j]=L.elem[j-1];
L.elem[i-1]=e;
L.length++;
}
void HeBing(SqList &L,SqList K)
{//将L表和K表合并返回给L
int i,j,k;
if(L.sizelist<L.length+K.length)
realloc(L.elem,L.sizelist+SizeLength);
j=L.length-1;
k=K.length-1;
for(i=L.length+K.length-1;j>=0 && k>=0;i--)
{
if(L.elem[j]>K.elem[k])
{
L.elem[i]=L.elem[j];
j--;
}
else
{
L.elem[i]=K.elem[k];
k--;
}
}
while(k>=0)
L.elem[i--]=K.elem[k--];
L.length=L.length+K.length;
}
int main()
{
SqList L,K;
printf("建立第一个线性表:\n");
InitList(L);
printf("建立第二个线性表:\n");
InitList(K);
DisplayList(L);
DisplayList(K);
printf("完成两个表的合并:");
HeBing(L,K);
DisplayList(L);
printf("对表一进行操作:\n");
while(1)
{
int n,e,i;
printf(" 1、遍历整个表。\n");
printf(" 2、查找元素。\n");
printf(" 3、插入元素。\n");
printf(" 4、删除元素。\n");
printf(" 5、退出。\n");
scanf("%d",&n);
switch(n)
{
case 1:
DisplayList(L);
break;
case 2:
printf("请输入要查找的元素:");
scanf("%d",&e);
SearchList(L,e);
break;
case 3:
printf("请输入要插入的位置和元素数值:");
scanf("%d %d",&i,&e);
InsertList(L,i,e);
DisplayList(L);
break;
case 4:
printf("请输入要删除元素的位置:");
scanf("%d",&i);
DeleteList(L,i);
break;
case 5:
printf("操作完成。\n");
return 0;
}
}
return 0;
}