线性表中链表的实现

#include<stdio.h>
#include<stdlib.h>
#define maxn 110000
typedef struct Node* LNode;
struct Node
{
    LNode next;
    int data;
};

//初始化//带有头节点的链表
LNode Creat()
{
    LNode head;
    head=(LNode)malloc(sizeof(struct Node));
    head->next=NULL;
    return head;
}

//在第i个位置插入k
//因为本身就是一个指针,所以不用取地址
void charu(LNode List,int i,int k)
{
    int pos;
    if(i<1)
    {
        printf("插入的位置不合法\n");
        return ;
    }
    LNode p=List;
    //新建一个Node存放待插入元素
    LNode t=(LNode)malloc(sizeof(struct Node));
    t->data=k;
    int m=1;
    while(p!=NULL&&m<i)
    {
        p=p->next;
        m++;
    }
    if(p==NULL)
    {
        printf("插入的位置不合法\n");
        return ;
    }
    t->next=p->next;
    p->next=t;
}

//输出List所有值
void print(LNode List)
{
    LNode h=List;
    while(h->next!=NULL)
    {
        printf("%d ",h->next->data);
        h=h->next;
    }
    printf("\n");
}

//删除位置为k-1的值
void shanchu(LNode List,int k)
{
    LNode head=List;
    int pos;
    if(k<1)
    {
        printf("删除的位置不合法\n");
        return ;
    }
    int t=1;
    while(head->next!=NULL&&t<k)
    {
        t++;
        head=head->next;
    }
    if(head->next==NULL)
    {
        printf("删除的位置不合法\n");
        return ;
    }
    head->next=head->next->next;
}

//寻找元素为k的位置
int Find(LNode List,int k)
{
    LNode head=List;
    int t=1;
    while(head->next!=NULL)
    {
        if(head->next->data==k)
            return t;
        t++;
        head=head->next;
    }
    return 0;
}

int main()
{
    LNode List;
    List=Creat();
    int length,del,find,k;
    scanf("%d",&length);
    printf("插入:");
    for(int i=0;i<length;i++)
    {
        scanf("%d",&k);
        charu(List,i+1,k);
    }
    print(List);
    printf("删除:");
    scanf("%d",&del);
    shanchu(List,del);
    print(List);
    printf("查找:");
    scanf("%d",&find);
    if(Find(List,find))
        printf("%d\n",Find(List,find));
    else
        printf("没有找到\n");
    return 0;
}

 

posted @ 2021-03-28 11:08  Joelin12  阅读(65)  评论(0)    收藏  举报