标题:求一个链表,供我学习
只看楼主
未微电子
Rank: 2
来 自:丹霞地貌
等 级:论坛游民
帖 子:47
专家分:57
注 册:2013-2-24
结帖率:88.89%
已结贴  问题点数:8 回复次数:4 
求一个链表,供我学习
给一个链表,共本人学习。近期我写了一个链表,但是不会写主函数。希望大家给我一个链表,让我看看是怎样调用函数以及写主函数的
搜索更多相关主题的帖子: 学习 希望 
2013-03-24 09:24
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6809
专家分:42393
注 册:2010-12-16
得分:3 
百度会有一大把,楼主要充分利用百度 google才行

我行我乐
我的博客:
http://blog.yuccn. net
2013-03-24 09:27
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
得分:3 
不会测试函数


[fly]存在即是合理[/fly]
2013-03-24 10:16
王捉熊
Rank: 2
等 级:论坛游民
帖 子:46
专家分:61
注 册:2012-10-23
得分:3 
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct student)
struct student
{
    long num;
    float score;
    struct student *next;
};
int n;
struct student *creat()
{
    struct student *head;
    struct student *p1,*p2;
    n=0;
    p1=p2=(struct student*)malloc(LEN);
    scanf("%ld,%f",&p1->num,&p2->score);
    head=NULL;
    while (p1->num!=0)
    {
        n=n+1;
        if(n==1)head=p1;
        else p2->next=p1;
        p2=p1;
        p1=(struct student *)malloc(LEN);
        scanf("%ld,%f",&p1->num,&p1->score);
    }
    p1->next=NULL;
    return (head);
}
void print(struct student *head)
{
    struct student *p;
    printf("\nNow,These %d records are :\n",n);
    p=head;
    if(head!=NULL)
        do
        {
            printf("%ld %5.1lf\n",p->num,p->score);
            p=p->next;
        }while(p!=NULL);
}
void main()
{
    struct student *head;
    head=creat();
    print(head);
}
这是谭老先生数上的,希望你满意

新手上路,说错请勿见怪!
2013-03-24 10:22
未微电子
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.626043 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved