用C语言写一个单向链表

最简单的链表的实现
服务器君一共花费了150.584 ms进行了4次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

链表作为线性表的一种实现方式,有插入删除方便的优点,但不能对节点进行随机访问。同时,要想知道某一节点的前驱节点,必须从头节点开始遍历才能找到,这体现了单链表的方向性。

下面用C语言简单实现一个单向链表:编写一个程序将一个头结点指针为pa的单链表A分解成两个单链表A和B,其头结点指针分别为pa和pb,使得A链表中含有原链表A中序号为奇数的元素,而链表B中含有原链表A中序号为偶数的元素,且保持原来的相对顺序。

#include<stdio.h>
#include<malloc.h>
#define NULL 0
#define LEN sizeof(List)
typedef struct node
{
    int data;
    struct node * next;
}List;
int n=0;
List *create(void)
{
    List * head;
    List * p1,* p2;
    p1=(List*)malloc(LEN);
    p2=(List*)malloc(LEN);
    head=NULL;
    puts("请输入要插入链表的数据(输入0结束):\n");
    scanf("%d",&p1->data);
    while(p1->data!=0)
    {
        n++;
        if(n==1)
            head=p1;
        else
            p2->next=p1;
        p2=p1;
        p1=(List*)malloc(LEN);
        scanf("%d",&p1->data);
    }
    free(p1);
    p2->next=NULL;
    return head;
}
void Print(List * head)
{
    List * p;
    p=head;
    if(head!=NULL)
        do
        {
            printf("[%d]->",p->data);
            p=p->next;
        }while(p!=NULL);
}
int main()
{
	int m;
	List * head;
	List * pa=(List*)malloc(LEN), *pb=(List*)malloc(LEN);
    List * p1,*p2;
    head=create();
    Print(head);
    printf("\n");
	
    p1=head;
    pa=p1;
    p2=p1->next;
    pb=p2;
	while(p2->next!=NULL)
    {
        p1->next=p1->next->next;
        p1=p2->next;
        if(p1->next==NULL)
            break;
        p2->next=p2->next->next;
        p2=p1->next;
    }
    p1->next=NULL;
    p2->next=NULL;
    Print(pa);
    printf("NULL\n");
    Print(pb);
    printf("NULL\n");
    //return 0;
	scanf("%d", &m);
}

程序运行结果:

请输入要插入链表的数据(输入0结束):
1
2
3
4
5
6
0
[1]->[2]->[3]->[4]->[5]->[6]->
[1]->[3]->[5]->NULL
[2]->[4]->[6]->NULL

本文地址:http://www.nowamagic.net/librarys/veda/detail/1550,欢迎访问原出处。

不打个分吗?

转载随意,但请带上本文地址:

http://www.nowamagic.net/librarys/veda/detail/1550

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧。很多人知识结构不好而且不系统,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读一百本计算机著作吧,少年!

《C陷阱与缺陷》 Andrew Koenig (作者), 高巍 (译者)

《C和C++经典著作•C陷阱与缺陷》适合有一定经验的C程序员阅读学习,即便你是C编程高手,《C和C++经典著作•C陷阱与缺陷》也应该成为你的案头必备书籍。作者以自己1985年在Bell实验室时发表的一篇论文为基础,结合自己的工作经验扩展成为这本对C程序员具有珍贵价值的经典著作。写作《C和C++经典著作•C陷阱与缺陷》的出发点不是要批判C语言,而是要帮助C程序员绕过编程过程中的陷阱和障碍。《C和C++经典著作•C陷阱与缺陷》分为8章,分别从词法分析、语法语义、连接、库函数、预处理器、可移植性缺陷等几个方面分析了C编程中可能遇到的问题。最后,作者用一章的篇幅给出了若干具有实用价值的建议。

更多计算机宝库...