链表

原创 2007年10月06日 14:03:00

  

#include <stdio.h>
#include 
<malloc.h>
#define NULL 0
#define LEN sizeof(struct student)

struct student
...{
    
int data;
    
struct student *next;
}
;

struct student *creat( )
...{
    
struct student *head, *p, *s;
    p 
= (struct student *)malloc( LEN );
    scanf(
"%d"&p->data);
    head 
= NULL;
    
while0 != p->data)
    
...{
        
if(head == NULL)
        head 
= p;
        
else
        
...{
            s 
= (struct student *)malloc( LEN );
            scanf(
"%d",&s->data);
            p
->next = s;
            p 
= s;
        }

    }

    p
->next = NULL;
    
return(head);
}


void print(struct student *head)
...{
    
struct student *p;
    p 
= head;
    
while(p != NULL)
    
...{
        printf(
"%d ",p->data);
        p 
= p->next;
    }

}


int main()
...{
    
struct student *head;
    head 
= creat();
    print(head);
    getch();
    
return 0;
}

 插入和删除新的节点

 

#include <stdio.h>
#include 
<malloc.h>
#define NULL 0
#define LEN sizeof(struct student)

struct student
...{
    
int data;
    
struct student *next;
}
;

struct student *creat( )        /**//* 创建无头节点的链表 */
...{
    
struct student *head, *p, *s;    /**//* s为新开辟的接点 */
    p 
= (struct student *)malloc( LEN );
    scanf(
"%d"&p->data);
    head 
= NULL;
    
while0 != p->data)
    
...{
        
if(head == NULL)
        head 
= p;
        
else
        
...{
            s 
= (struct student *)malloc( LEN );
            scanf(
"%d",&s->data);
            p
->next = s;
            p 
= s;
        }

    }

    p
->next = NULL;
    
return(head);
}


struct student *insert(struct student *head,struct student *stu)
/**//* 插入新的接点 */
...{
    
struct student *p, *q, *s; /**//* p为游标结点,q为p前结点,s为插入结点 */
    p 
= head;
    s 
= stu;
    
if(head == NULL)
    
...{
        head 
= s;
        s 
->next  = NULL;
    }

    
else
    
...{
        
while((s->data > p->data)&&(p->next != NULL))
        
...{
            q 
= p;
            p 
= p->next;
        }

        
if(s->data <= p->data)
        
...{
            
if(head == p)
            head 
= s;
            
else
            q
->next = s;
            s
->next = p;
        }

        
else
        
...{
            p
->next = s;
            s
->next =NULL;
        }

    }

    
return(head);
}



struct student *del(struct student * head, int num)
/**//* 删除节点函数 */
...{
    
struct student *p, *q, *f;    /**//* 释放删除节点的内存 */
    
if(head == NULL)
    
...{
        printf(
"linklist null! ");
        
goto end;
    }

    
else
    
...{
         p 
= head;
        
while((num != p->data)&&(p->next != NULL))
        
...{
            q 
= p;
            p 
= p->next;
        }

        
if(num == p->data)
        
...{
            
if( p == head )
            
...{
                f 
= head;
                head 
= p->next;
                free(f);
            }

            
else
            
...{
                f 
= p;
                q
->next = p->next;
                free(f);
            }

        }

    }

end:
    
return head;
}


void print(struct student *head)   //输出链表
...{
    
struct student *p;
    p 
= head;
    printf(
"head=%d ",head->data);
    
while(p != NULL)
    
...{
        printf(
"%d ",p->data);
        p 
= p->next;
    }

}


int main()
...{
    
struct student *head, *s;
    
int data;
    head 
= creat();
    print(head);

    printf(
"insert new node: ");
    s 
= (struct student *)malloc(LEN);
    scanf(
"%d",&s->data);
    head 
= insert(head,s);

    printf(
"now the linklist is: ");
    print(head);

    printf(
"input the delete num: ");
    scanf(
"%d",&data);
    head 
= del(head, data);
    print(head);

    getch();
    
return 0;
}

链表的创建,插入,删除,打印输出(c)

 

struct student *reverse(struct student *head)
...{
    
struct student *p, *q, *r;
    p 
= head ;
    q 
= p->next;
    
while(q != NULL)
    
...{
        r 
= q->next;
        q
->next = p;
        p 
= q;
        q 
= r;
    }

    head
->next = NULL;
    head 
= p;
    
return(head);
}
倒置函数如下,插入即可使用

[C/C++基础知识] 那些被遗忘的链表知识

最近快毕业了,复试又复习了一些知识.其中就包括那些被遗忘的链表知识,而它又是C语言中非常重要一个知识点.同时发现很多同学都会忘记该知识,所以通过这篇文章一方面帮助大家回忆链表知识,同时对刚接触C语言的...
  • Eastmount
  • Eastmount
  • 2014年03月28日 01:25
  • 3031

链表的基本使用一(构建链表)

构建链表 因为有不少朋友向我询问链表的一些事情,他们都在问链表指针啥的写起来都好麻烦的,有啥用呢。。。。。。。作为一只萌新就浅谈些我的一些感觉吧 我一开始的时候也是比较排斥链表的,因为这玩意一...
  • LAN74__
  • LAN74__
  • 2016年12月22日 20:48
  • 1906

【数据结构】链表的原理及java实现

一:单向链表基本介绍链表是一种数据结构,和数组同级。比如,Java中我们使用的ArrayList,其实现原理是数组。而LinkedList的实现原理就是链表了。链表在进行循环遍历时效率不高,但是插入和...
  • jianyuerensheng
  • jianyuerensheng
  • 2016年04月20日 13:57
  • 29751

实现嵌套链表

程序设计里面作业的一道题,感觉我们的助教师兄出的很好,
  • u013917410
  • u013917410
  • 2014年04月21日 13:21
  • 941

linux中链表的使用

linux下链表的使用方法跟我们常规的不一样,通常情况下,链表的next指针都指向节点的起始位置,但linux中链表指向的是下一个节点中链表所在的地址,这是一种很好的处理方法,不用每换一种数据结构就处...
  • finewind
  • finewind
  • 2012年10月15日 22:38
  • 6534

链表的理解与实现[数据结构]

一、链表的定义n个节点离散分配,节点之间通过指针相连。除了首节点和尾节点之外,每个节点都只有一个前驱结点和一个后继节点。 如下图: 大家有没有发现,链表的结构很像一种交通工具,什么呢? 火车...
  • u011509781
  • u011509781
  • 2016年01月27日 14:02
  • 1960

链表——用C++模板实现

LinkedList.h//单向链表的实现 //查找、插入和移除某个元素、复制、清空单向链表的时间复杂度均为O(n) //设计类时,应尽量减少类的成员函数之间的依赖关系 #ifndef LINK...
  • Microsues
  • Microsues
  • 2010年12月29日 20:02
  • 12419

几种链表的概念

何谓链表?  :链式存储的线性表,简称链表。链表由多个链表元素组成,这些元素称为节点。结点之间通过逻辑连接,形成链式存储结构。存储结点的内存单元,可以是连续的也可以是不连续的。逻辑连接与物理存储次序...
  • hello_world6
  • hello_world6
  • 2016年10月06日 21:37
  • 3871

C---仓储管理系统实现(嵌套链表or二维链表)

实现要求和环境语言和环境 C语言实现 windows系统 VS201x 实现目标 商品管理:包括商品的添加,删除,更改,查看 入库管理:仓库管理员录入入库商品 出库管理:仓库管理员录入出库信息 统计库...
  • FreeApe
  • FreeApe
  • 2015年11月13日 20:26
  • 2312

Python试写简单的单链表

简述: 用一下面向对象方法,用Python写一下链表 代码: List.py class Node: next = None data = None def __init...
  • anialy
  • anialy
  • 2012年06月29日 21:59
  • 7791
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:链表
举报原因:
原因补充:

(最多只允许输入30个字)