欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

单链表基本操作的实现

程序员文章站 2023-08-23 09:55:43
插入节点图解 s->next = p->next; p->next = s; 创建节点 1 typedef struct Lnode 2 { 3 ElemType data; 4 struct Lnode * next; 5 } Lnode,*LinkList; 单链表的进本操作 1.创建链表 1 ......

插入节点图解

单链表基本操作的实现

 s->next = p->next;
    p->next = s;

 

创建节点

1 typedef struct lnode
2 {
3     elemtype data;
4     struct lnode * next;
5 } lnode,*linklist;

 单链表的进本操作

1.创建链表

 1 linklist creatlist()
 2 {
 3     linklist l = (linklist)malloc(sizeof(lnode));
 4     linklist ptai = l;
 5     ptai->next=null;
 6     l->next = null;
 7 
 8     printf("input length:\n");
 9     scanf("%d",&l->data);
10 
11     for(int i=1;i<=l->data;i++)
12     {
13         linklist pnew = new lnode;
14         printf("input %d data\n",i);
15         scanf("%d",&pnew->data);
16 
17         ptai->next = pnew;               //尾插法
18         ptai = pnew;
19         ptai->next = null;
20     }
21 
22     return l;
23 }

2.遍历链表

 1 void traverse(linklist l)
 2 {
 3     linklist p = l;
 4     while(p->next!=null)
 5     {
 6         printf("%d ",p->next->data);
 7         p=p->next;
 8     }
 9     printf("\n");
10 }

 

 3.插入节点

status insertlist(linklist l,int local,elemtype &e)
{
    if(local<1||local>(l->data+1))
    {
        printf("invalid input\n");  //判断插入的未知是否有效
        return false;
    }

    linklist p = l;
    for(int i=1;i<local;i++)
    {
        p = p->next;       
    }

    linklist s = new lnode;

    s->data = e;
    s->next = p->next;
    p->next = s;

    l->data++;           //插入后长度加1
    return true;

}

4.删除节点

 1 status deletelist(linklist l,int pos)
 2 {
 3     if(pos<1||pos>l->data)
 4     {
 5         printf("invalid input\n");
 6         return false;
 7     }
 8 
 9     linklist p = l;
10     for(int i=1;i<pos;i++)
11     {
12         p = p->next;
13     }
14 
15     p->next = p->next->next;
16     l->data--;
17 
18     return true;
19 
20 }

5.单链表的取值

 1 int getval(linklist l,int pos)
 2 {
 3     if(pos<1||pos>l->data)
 4     {
 5         printf("invalid input\n");   //判断查找的位置是否合理
 6         return 0;
 7     }
 8 
 9     linklist p = l;
10     for(int i=1;i<pos;i++)
11     {
12         p = p->next;
13     }
14 
15     return p->next->data;      //返回查找的值
16 }

6.单链表的查找

 1 int getpos(linklist l,elemtype val)
 2 {
 3     linklist p = l;
 4     for(int i=1;i<=l->data;i++)
 5     {
 6         p = p->next;
 7         if(p->data==val)
 8         {
 9             return i;                //返回值的位置
10         }
11 
12         if(i==l->data)
13         {
14             return 0;                //若没找到,返回0
15         }
16     }
17 }