码迷,mamicode.com
首页 > 其他好文 > 详细

单链表的建立/测长/打印

时间:2015-04-10 11:07:19      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:

#include <stdio.h>
#include <stdlib.h>  //函数malloc需要的头文件

typedef struct student * PNode;

typedef struct student     //设计链表前最重要的是先想好数据结构
{
    int data;
    struct student *next;
}Node;

PNode create()
{
    PNode head,p;
    int x=0;
    char flag;
    head=(PNode)malloc(sizeof(Node));
    p=head;
    if(head==NULL)
        return NULL;
    printf("请输入节点的值:");
    scanf("%d",&x);
    while(1)
    {
        p->data=x;
        printf("是否继续添加链表:Y/N\n");
        scanf(" %c",&flag);     //注意,在%c前面有个空格,是为了防止上一个语句的回车符,因为scanf会把回车符当做一个字符,而scanf只接收一个字符
        if(N==flag)
            break;
        p->next=(PNode)malloc(sizeof(Node));   //为下一个节点申请地址
        p=p->next;
        printf("请输入节点的值:");
        scanf("%d",&x);
    }
   p->next=NULL;
    return head;
}

void print(PNode link)
{
    PNode head=link;
    if(head==NULL)
        return;
    while(head!=NULL)
    {
        printf("%d ",head->data);
        head=head->next;
    }
    printf("\n");
}

int length(PNode link)
{
    int count=0;
    PNode head=link;
    while(head!=NULL)
    {
        ++count;
        head=head->next;
    }
    return count;
}

PNode del(PNode link,int num)  //删除分两种情况,一种是删除第一个节点,另外一种是删除中间节点。
{
        PNode head,p,temp;
        head=link;
        if(head->data==num)   //删除第一个节点
        {   
                head=head->next;
                return head;
        }   
        p=head;
        while(p->next!=NULL)
        {   
                if(p->next->data==num)          //删除第其他节点
                {   
                        temp=p->next->next;
                        free(p->next);
                        p->next=temp;
                        return head;
                }   
                p=p->next;
    
        }   
        printf("没有这样的节点");
        return link;
}

int main(void)
{
    PNode link;
    int len;//链表长度
    int num;//要删除的值
    link=create();//创建链表
    printf("打印删除前的链表\n");
    print(link);
    printf("请输入要删除的链表的值:");
    scanf("%d",&num);
    link=del(link,num);
    printf("打印删除后链表的值\n");
    print(link);
    len=length(link);
    printf("链表的长度为%d\n",len);
    return 0;
}

 

单链表的建立/测长/打印

标签:

原文地址:http://www.cnblogs.com/longzhongren/p/4413826.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!