单链表基本操作的实现

插入节点图解

 s->next = p->next;
    p->next = s;
View Code

 

创建节点

1 typedef struct Lnode
2 {
3     ElemType data;
4     struct Lnode * next;
5 } Lnode,*LinkList;
View Code

 单链表的进本操作

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 }
View Code

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 }
View Code

 

 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;

}
View Code

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 }
View Code

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 }
View Code

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 }
View Code

 

posted @ 2019-10-04 11:36  wwww2  阅读(505)  评论(0编辑  收藏  举报