求求大佬了,上课没好好听
代码及运行结果如下,如有帮助,请帮忙采纳一下,谢谢。
代码:
#include <stdio.h>
#define LIST_INIT_SIZE 20
struct LinkList
{
int arr[LIST_INIT_SIZE];
int length;
};
//创建链表
void CreateList(struct LinkList *lst)
{
int i,n,m;
lst->length = 0;
printf("请输入链表中数据的个数(<=%d):",LIST_INIT_SIZE);
scanf("%d",&m);
printf("请输入%d个元素存入数组中",m);
for (i=0;i<m;i++)
{
scanf("%d",&n);
lst->arr[lst->length] = n;
lst->length++;
}
}
//查找第一个满足条件的元素
int FindFirstEle(struct LinkList *lst,int data)
{
int i;
for (i=0;i<lst->length;i++)
{
if (lst->arr[i] == data)
{
return (i+1);
}
}
return 0;
}
//在i位置插入新元素
int InsertEle(struct LinkList *lst,int i,int e)
{
int j;
if(i<=0)
printf("位置必须是大于0的数\n");
else if(i >lst->length)
printf("插入位置超过了当前元素的数量%d",lst->length);
else
{
for (j = lst->length;j>=i;j--)
{
lst->arr[j] = lst->arr[j-1];
}
lst->arr[i-1] = e;
printf("插入成功\n");
}
return 0;
}
//从链表中删除元素(i是下标,从0开始)
void DeleteEle(struct LinkList *lst,int i)
{
int j;
if(i<=0)
printf("下标必须大于0\n");
else if(i>= lst->length)
printf("下标太大,数组中这个位置没有数据\n");
else
{
i = i-1;
for(j = i;j<lst->length -1;j++)
lst->arr[j] = lst->arr[j+1];
lst->length--;//长度减1
printf("删除成功\n");
}
}
//显示列表
void printList(struct LinkList *lst)
{
int i;
printf("链表当前元素为:");
for (i=0;i<lst->length;i++)
{
if(i<lst->length-1)
printf("%d ",lst->arr[i]);
else
printf("%d\n",lst->arr[i]);
}
}
//排序
void SortList(struct LinkList* lst)
{
int i,j,t;
for (i=0;i<lst->length -1;i++)
{
for (j=0;j<lst->length -1-i;j++)
{
if(lst->arr[j] > lst->arr[j+1])
{
t = lst->arr[j];
lst->arr[j] = lst->arr[j+1];
lst->arr[j+1] = t;
}
}
}
}
//合并列表
void Merge(struct LinkList* a,struct LinkList* b,struct LinkList* c)
{
int i,j,index=0;
SortList(a);
SortList(b);
for (i=0,j=0;i<a->length || j<b->length;)
{
if(i<a->length && j<b->length)
{
if(a->arr[i] <= b->arr[j])
c->arr[index++] = a->arr[i++];
else
c->arr[index++] = b->arr[j++];
}else if (i >= a->length && j<b->length)
{
c->arr[index++] = b->arr[j++];
}else if (i < a->length && j >= b->length)
{
c->arr[index++] = a->arr[i++];
}
}
c->length = a->length + b->length;
printf("合并完成\n");
}
int main()
{
struct LinkList a;
struct LinkList b;
struct LinkList c;
int i,data;
printf("创建表A:");
CreateList(&a);
printList(&a);
printf("请输入要查找的元素:");
scanf("%d",&data);
i = FindFirstEle(&a,data);
printf("位置:%d\n",i); //i=0表示没找到
printf("请输入要插入的元素位序和元素值:");
scanf("%d %d",&i,&data);
InsertEle(&a,i,data);
printf("插入元素后,");
printList(&a);
printf("请输入要删除的元素下标(最小是1):");
scanf("%d",&i);
DeleteEle(&a,i);
printf("删除元素后,");
printList(&a);
printf("创建表B:");
CreateList(&b);
Merge(&a,&b,&c);
printf("合并后的");
printList(&c);
return 0;
}