标题:求一个链表,供我学习
取消只看楼主
未微电子
Rank: 2
来 自:丹霞地貌
等 级:论坛游民
帖 子:47
专家分:57
注 册:2013-2-24
结帖率:88.89%
已结贴  问题点数:8 回复次数:1 
求一个链表,供我学习
给一个链表,共本人学习。近期我写了一个链表,但是不会写主函数。希望大家给我一个链表,让我看看是怎样调用函数以及写主函数的
搜索更多相关主题的帖子: 学习 希望 
2013-03-24 09:24
未微电子
Rank: 2
来 自:丹霞地貌
等 级:论坛游民
帖 子:47
专家分:57
注 册:2013-2-24
得分:0 
这个程序就是我写的。但是插入不正确。插入后,元素总数反而减少了
#include<stdio.h>
#include<malloc.h>

typedef int DataType ;
typedef struct Node
{
    DataType data;
    struct Node *next;
}LNode, *PNode, *LinkList;

//建立链表
int InitList(LinkList *h)
{
    *h = (LinkList)malloc(sizeof(LNode));

    if (!h)
    {
        printf("初始化链表错了\n");
        return 0;
    }
    (*h)->next = NULL;

    return 1;
}
//表长
int ListLength (LinkList h)
{
    int total = 0;
    PNode p = h->next;
    while(p)
    {
        total++;
        p = p->next;
    }
    return total;
}
//判断空表
int ListEmpty(LinkList h)
{
    if (h->next)
        return 0;
    else
        return 1;
}
//插入
int ListInsret(LinkList h, int pos, DataType x) //pos 为插入的位置,x为待插入的元素
{
    PNode p = h, q;

    int i = 0;
    while (p && i < pos -1) //p != NULL
    {
        p = p->next;
        i++;
    }

    if (!p || i > pos - 1) //!p:p ==NULL
    {
        printf("插入的位置不合法");
        return 0;
    }

    q = (PNode)malloc(sizeof(LNode)); //心结点
    if (!q)
    {
        printf("不能生成新的节点");
        return 0;
    }
    q ->data = x;
    q->next = p->next;
    p->next = q;

    return 1;
}

//删除
int ListDelete(LinkList h, int pos, DataType *item) //pos删除位置,item返回被删除元素
{
    PNode p = h, q;
    int i = 0;

    while (p->next && i < pos - 1)
    {
        p = p->next;
        i++;
    }

    if (!p->next || i > pos - 1)
    {
        printf("删除的位置不合法");
        return 0;


    }

    q = p->next;
    p->next = q->next;
    *item = q->data;

    free(q);

    return 1;
}

//查找

PNode Find(LinkList h, DataType item)
{
    PNode p = h->next;
    while (p && p->data!=item)
        p = p->next;
    return p;
}

//遍历
void Traverselist (LinkList h)
{
    PNode p = h->next;
   
    while (p)
    {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}


//主函数
int main(void)
{
    int i, pos, x, pos1, item, qq;
    int data[10];
    LNode *kk;
    LinkList h = NULL;
    InitList(&h);


    printf("请输入10个数值:");
    for (i = 0; i < 10; i++)
    {
        scanf("%d", &data[i]);
    }

    for (i = 0; i < 7; i++)
    {
        if (!ListInsret(h, i+1, data[i]))
        {
            printf("插入操作错误!\n");
            return 0;
        }

    }
    printf("元链表:");
    for (i = 0; i < 10; i++)
    {
        printf("%d ", data[i]);
    }
printf( "\n");
    //插入

    printf("请输入插入的位置和元素:");
    scanf("%d%d", &pos, &x);

    if (!ListInsret(h, pos, x))
        printf("erroe");
   
    printf("插入之后的链表:");
    Traverselist(h);

//删除
    printf("请输入删除的位置:");
    scanf("%d", &pos1);

    if (!ListDelete(h, pos1, &item))
        printf("erroe");
   
    printf("删除之后的链表:");
    Traverselist(h);

//查找

printf("请输入查找的数据 :");
scanf("%d", &qq);

kk = Find( h, qq);

    printf("本链表有所输入的数据 :%d\n", kk->data);

    return 0;
   


}


失信于一人,才跌入凄凉的境界。
2013-03-24 10:32



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-401746-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.166973 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved