简明现代魔法 -> 数据结构 -> 用C语言实现一个简单的单向链表

用C语言实现一个简单的单向链表

2011-06-07

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

下面用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
随机文章推荐
网站分类


注:如需转载本文,请注明出处(原文链接),谢谢。更多精彩内容,请进入简明现代魔法首页。

进入新博客
喜欢本文,就分享它吧
给我留言
您的名字:
您的邮件:
您的网站:


 

copyright © 2009 简明现代魔法    学习、分享、进步

power by Gonn 感谢所有关心和支持本站的朋友们