| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2500 人关注过本帖
标题:想学习一下链表,求个例题学习一下,要详细,谢谢啦
只看楼主 加入收藏
chaoba
Rank: 1
等 级:新手上路
帖 子:20
专家分:5
注 册:2016-11-20
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:19 
想学习一下链表,求个例题学习一下,要详细,谢谢啦
想学习一下链表,求个例题学习一下,要详细,谢谢啦,想知道,如何创建链表。和往链表里面输入数据
#include<stdio.h>
#include<malloc.h>
typedef struct student
{
    char name[10];
    struct student *next;
}s;
s chuangjian(s *p1)
{
    s *head;
p1=(s*)malloc(sizeof(s));


p1=head=NULL;
}

[此贴子已经被作者于2017-1-22 17:25编辑过]

搜索更多相关主题的帖子: include 如何 
2017-01-22 16:47
bjut_Allen
Rank: 9Rank: 9Rank: 9
来 自:平乐园工业技术学校
等 级:蜘蛛侠
威 望:8
帖 子:323
专家分:1223
注 册:2016-10-16
收藏
得分:1 
把数组改写成指针形式

Code is my life.
2017-01-22 16:59
chaoba
Rank: 1
等 级:新手上路
帖 子:20
专家分:5
注 册:2016-11-20
收藏
得分:0 
回复 2楼 bjut_Allen
对那个创建链表不懂
2017-01-22 17:11
ldsh304
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:242
专家分:755
注 册:2016-1-18
收藏
得分:1 
包含头节点的单链表:
程序代码:
# include <stdio.h>
# include <stdlib.h>

typedef struct node
{
    int date;
    struct node *pNext;
}NODE, *PNODE;

PNODE crate_list()//创建链表
{
    PNODE pHead, pTail, pNew;
    int val;

    pHead = (PNODE )malloc (sizeof(NODE));
    if (NULL == pHead)
    {
        printf("分配失败,程序终止!\n");
        exit(-1);
    }
    pTail = pHead;
    pTail->pNext = NULL;
    while (1)
    {
        printf("节点 : ");
        scanf("%d", &val);

        if (0 == val)
            return pHead;

        pNew = (PNODE )malloc (sizeof(NODE));
        if (NULL == pHead)
        {
            printf("分配失败,程序终止!\n");
            exit(-1);
        }
        pNew->date = val;
        pTail->pNext = pNew;
        pNew->pNext = NULL;
        pTail = pNew;
    }
    
    return pHead;

}

void output_list(PNODE pHead)
{
    PNODE temp;

    temp = pHead->pNext;

    while (NULL != temp)
    {    
        printf("%d ", temp->date);
        temp = temp->pNext;
    }
    printf("\n");

    return ;
}

int main()
{
    PNODE pHead = NULL;

    pHead = crate_list();
    output_list(pHead);

    return 0;
}



没有头节点的单链表:
程序代码:
# include <iostream>
using namespace std;

typedef struct node
{
    int val;
    struct node *pNext;
}NODE, *PNODE;

void init(PNODE &pHead)
{
    int val;

    pHead = NULL;
    PNODE temp;
    PNODE pRecord;

    while (1)
    {
        scanf("%d", &val);
        if (0 == val)
            break;

        temp = new NODE;
        temp->pNext = NULL;
        temp->val = val;
        if (NULL == pHead)
        {
            pHead = temp;
            pRecord = pHead;
        }
        else
        {
            pRecord->pNext = temp;
            pRecord = temp;
        }
    }

}

void print(PNODE &pHead)
{
    PNODE temp;

    temp = pHead;

    while (NULL != temp)
    {
        cout << temp->val << " ";
        temp = temp->pNext;
    }
    cout << endl;

}


int main()
{
    PNODE pHead;

    init(pHead);
    print(pHead);

    return 0;
}
2017-01-22 17:27
chaoba
Rank: 1
等 级:新手上路
帖 子:20
专家分:5
注 册:2016-11-20
收藏
得分:0 
回复 4楼 ldsh304
谢谢啦,我先看看,学习学习
2017-01-22 17:33
chaoba
Rank: 1
等 级:新手上路
帖 子:20
专家分:5
注 册:2016-11-20
收藏
得分:0 
回复 4楼 ldsh304
pnew->name=val;  //新节点name的值为val.把val的值给新节点name
    tail->next=pnew;    //尾部节点next指向下一个新节点
    pnew->next=NULL;
    tail=pnew;

这4句话是什么意思啊,
2017-01-22 18:47
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:1 
第一句是为新元素的name属性赋值,第二句是把新建的元素pnew添加到原来的链表末尾,第三句是让新添加到链表末尾的元素尾部不指向其他地址,第四句是把新添上去的元素定义成表尾,以便以后再向tail添加其他的新元素。
2017-01-22 19:26
chaoba
Rank: 1
等 级:新手上路
帖 子:20
专家分:5
注 册:2016-11-20
收藏
得分:0 
回复 7楼 yangfrancis
哦,谢谢啦
2017-01-22 19:43
chaoba
Rank: 1
等 级:新手上路
帖 子:20
专家分:5
注 册:2016-11-20
收藏
得分:0 
回复 7楼 yangfrancis
    pnew->name=val;  //把val的值赋给name ,pnew指向name
    tail->next=pnew;  //把pnew赋值给next。tail指向next
    pnew->next=NULL;   //把null赋值给next ,pnew指向next
    tail=pnew;



这样理解可以吗?
2017-01-22 19:48
bjut_Allen
Rank: 9Rank: 9Rank: 9
来 自:平乐园工业技术学校
等 级:蜘蛛侠
威 望:8
帖 子:323
专家分:1223
注 册:2016-10-16
收藏
得分:0 
//建立链表时输入-1终止输入


#include <stdio.h>
#include <stdlib.h>
typedef struct node {
    int num;
    struct node *next;
}NODE;
NODE* create(void);
void output(NODE *head);
void _free(NODE *head);
int length(NODE *head);
NODE* insert(NODE *head);
int search(NODE *head);
NODE* clear(NODE *head);
int main()
{
    NODE *head;
    int len=0,pos=0;    //长度和位置
    head = create();        //建立链表
    output(head);           //输出链表
    len = length(head);
    printf("\nlength=%d\n", len);   //输出链表长度
   
    head = insert(head);   //   插入节点
    output(head);           //输出链表

    pos=search(head);     //赋值位置
    printf("\npos=%d", pos);

    head = clear(head);         //删除一个节点
    output(head);

    len = length(head);      //在计算链表长度
    printf("\nlength=%d\n", len);   //输出链表长度
   
    _free(head);
    printf("\n");
    system("pause");
    return 0;
}
NODE *create(void) {
    NODE *head = NULL;
    NODE *p;
    NODE *s;
    int n;
    printf("Enter chain table:");
    scanf_s("%d", &n);
    while (n != -1) {
        p = (NODE*)malloc(sizeof(NODE));
        p->num = n;
        if (head == NULL) {
            head = p;
            s = p;
        }
        else {
            s->next = p;
            s = p;
        }
        scanf_s("%d", &n);
    }
    p->next = NULL;

    return head;
}
void output(NODE* head) {
    NODE *p;
    p = head;
    do {
        printf("%d|", p->num);
        p = p->next;
    } while (p != NULL);
}
void _free(NODE *head) {
    NODE *p, *s;
    p = s = head;
    do {
        p = p->next;
        free(s);
        s = p;
    } while (p != NULL);

}
int length(NODE *head) {
    NODE *p = head;
    int len = 0;
    while (p != NULL) {
        len++;
        p = p->next;
    }
    return len;
}
NODE *insert(NODE *head) {
    NODE *s, *p, *q;
    s = (NODE*)malloc(sizeof(NODE));
    printf("\nEnter insertnum:");
    scanf_s("%d", &s->num);
    s->next = NULL;
    p = q = head;
    p = p->next;
    //printf("q->num=%d", q->num);
    if (s->num <= q->num) {
        s->next = q;
        head = s;
        return head;
    }
    else {
        while (p != NULL && s->num > p->num) {
            p = p->next;
            q = q->next;
        }
        s->next = q->next;
        q->next = s;
    }
    return head;
}
int search(NODE *head) {
    NODE *p;
    int  pos = 0, searchnum=0;
    p = head;
    printf("\nEnter your searchnum:");
    scanf("%d", &searchnum);
    while (p != NULL) {
        pos++;
        if (searchnum == p->num)
            break;
        p = p->next;
    }
    if(p==NULL)
    printf("NO found");
    return pos;
}
NODE* clear(NODE *head) {
    int deletenum;
    NODE *p, *q;
    p = head;
    q=head;
    p = p->next;
    printf("\nEnter your deletenum:");
    scanf_s("%d", &deletenum);
    if (deletenum == q->num) {
        head = q->next;
        free(q);
        return head;
    }
    while (p != NULL) {
        if (deletenum == p->num)
        {
            q->next = p->next;
            free(p);
            break;
        }
        p = p->next;
        q=q->next;
    }
    if(p=NULL)
    printf("NO found");
    return head;
}

Code is my life.
2017-01-22 21:02
快速回复:想学习一下链表,求个例题学习一下,要详细,谢谢啦
数据加载中...
 
   



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

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