/
// main.c
// 链表
//
// Created by 丘** on 2021/7/25.
//
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
int data;
struct LNode* next;
}LNode,* LinkList;
void CreatList_H(LinkList L,int n)//前插法创建
{
L->next=NULL;
int e;
for(int i=0;i<n;i++)
{
LinkList p=(LinkList)malloc(sizeof(LNode));
printf("请输入元素:");
scanf("%d",&e);
p->data=e;
p->next=L->next;
L->next=p;
}
}
void GetElem(LinkList L,int i)//i为节点序号
{
LinkList p;
p=L->next;
int j=1;
while(p!=NULL&&j<i)
{
p=p->next;
j++;
}
printf("j is %dn",j);
if(p==NULL||j>i)
{
printf("i值不合法");
return;
}
int e=p->data;
printf("%d就是你要找的",e);
}
void CreatList_R(LinkList L,int n)//后插法,需增设尾指针
{
L->next=NULL;
int e;
LinkList r=L;
for(int i=0;i<n;i++)
{
LinkList p=(LinkList)malloc(sizeof(LNode));
printf("请输入元素:");
scanf("%d",&e);
p->data=e;
p->next=NULL;
r->next=p;//如果是第一个节点的话,等价于L->next=p;
r=p;
}
}
LinkList LocateElem(LinkList L,int e)//若p不为空,则查找成功
{
LinkList p;
p=L->next;
while(p!=NULL&&p->data!=e)
{
p=p->next;
}
return p;
}
void ListInsert(LinkList L,int i,int e)//在位置i插入
{
LinkList p=L;//p不能等于L->NEXT,因为要考虑如果要在i=1的位置插入节点
int j=0;
while(p!=NULL&&(j<i-1))
{
p=p->next;
j++;
}
if(p==NULL||j>i-1)
{
printf("i值不合法");
return;
}
LinkList s;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
}
void ListDelete(LinkList L,int i)
{
LinkList p=L;
int j=0;
while(p!=NULL&&(j<i-1))
{
p=p->next;
j++;
}
if(p->next==NULL||j>i-1)//这里就不是p==NULL了,因为就算p!=NULL,也可能没有首元节点
{
printf("i值不合法");
return;
}
LinkList q=p->next;
p->next=q->next;
free(q);
}
int main(int argc, const char * argv[]) {
printf("Hello, World!n");
LNode L;
int n;
printf("how many n?n");
scanf("%d",&n);
CreatList_R(&L, n);
int i;
printf("请输入序号n");
scanf("%d",&i);
GetElem(&L,i);
int e;
LocateElem(&L, e);
ListDelete(&L, i);
ListDelete(&L, i);
return 0;
}
本文发布于:2024-01-28 14:10:20,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17064222267978.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |