根据给定的整型数组,以尾插法建立一个单链表,并实现以下操作:
① 查找:输入一个欲查找的整数,找到则显示第一个相匹配的整数在单链表中所处的位置,若不存在,则显示提示信息。
② 删除:输入一个欲删除的整数e ,若存在则在单链表中删除第一个值为e 的元素。
③ 插入:输入一个欲插入位置i和欲插入元素e,将e 插入到第i 个整数之前(注意i 的合法性)。
算法源码
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct Node{ //单链表
int data; //结点自身信息
struct Node *next; //后继结点的指针
}LNode,*LinkList; //2个类型别名,分别代表链表中的结点、指向结点的指针
/*******创建表长为n的单链表L,n个元素的值存于数组values中*****/
LinkList Creat_LinkList(int *values) //创建链表并将values数组的数值导入
{
int i,n;
LinkList tail,p; //创建尾结点和工具结点
LinkList head=(LinkList)malloc(sizeof(LNode)); //为头结点分配内存
if (head!=NULL)
{
printf("请输入表长n=");scanf("%d",&n) ;
head->next=NULL;
tail=head;
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
p->data=values[i];
if(p!=NULL){
printf("第%d个元素:%d\n",i+1,p->data);
tail->next=p;
tail=p;
tail->next=NULL;
}
else {
printf("内存分配失败!");
exit(0);}
} }
else {
printf("内存分配失败!");
exit(0);}
return head;
}
void insert_LinkList(LinkList head,int i,int e) //向链表中插入元素
{
int j=0;
LinkList q=head,s;
while(q!=NULL&&j<i-1){
q=q->next;
++j;
}
if(q==NULL||j>i-1){
printf("未找到要插入的位置!");
exit(0);}
else {s=(LinkList)malloc(sizeof(LNode));
if(s==NULL){
printf("内存分配失败!");
exit(0);}
else {s->next=q->next;
q->next=s;
s->data=e;
}
}
return;
}
void traverse_list(LinkList head) //遍历显示链表中的元素
{
LinkList p=head->next;
printf("\n链表的内容为:") ;
while(NULL!=p)
{printf("%d ",p->data);
p=p->next;
}
printf("\n\n");
return;
}
int seek_elem(LinkList head) //查询链表中的元素位置并返回
{
int a=0,i=0;
LinkList q=head;
printf("请输入欲查找的整数a=");scanf("%d",&a);
while(q!=NULL&&q->data!=a)
{
q=q->next;
++i;
}
if(q==NULL)
{
printf("未查找到整数a!");
exit(0);
}
return i;
}
void delete_elem(LinkList head) //删除链表中的元素
{
int e=0;
LinkList r=head,t;
printf("请输入欲删除的整数e=");scanf("%d",&e);
while(r->next!=NULL&&r->next->data!=e)
{
r=r->next;
}
if(r->next==NULL)
{
printf("未找到欲删除的整数!");
}
else
{
t=r->next->next;
free(r->next);
r->next=t;
}
return;
}
int main(void)
{
int a=0,n=0,m=0,i=0,e=0;
int values[100]; //建立数组并输入值
printf("建立values数组,请输入该数组元素的个数:");scanf("%d",&n);
printf("请输入各元素:\n");
for(m=0;m<n;m++)
scanf("%d",&values[m]);
LinkList head=NULL;
head=Creat_LinkList(values);
traverse_list(head);
printf("请输入要插入的位置:");scanf("%d",&i);
printf("请输入要插入的元素:");scanf("%d",&e);
insert_LinkList(head,i,e);
traverse_list(head);
delete_elem(head);
traverse_list(head);
a=seek_elem(head);
printf("该元素在第%d个位置。",a) ;
return 0;
}
如果有什么问题和疑问,欢迎在评论区留言哦~