单向链表

来源:互联网 发布:网络消费者的心理特征 编辑:程序博客网 时间:2024/06/05 02:01

单向链表,双向也是类似


实现的主体是node,这个typedef还是很讨厌,不过还是写出来了,着这里没有什么用。

可以建立一个xxx.hpp,整体放进去(把main拿掉),方便需要的时候调用。

// 计算表达式.cpp : 定义控制台应用程序的入口点。// 单向链表// #include "stdafx.h"#include <stdio.h>#include <stdlib.h>typedef struct _node{    int num;    struct _node *next;} node;node* prtLLst(node *p);node* create();void freeLst(node *p);int main(){    node *linkHead = NULL;    linkHead = create();    prtLLst(linkHead);    freeLst(linkHead);    return 0;}node *create(){    node *p1 = NULL;    node *last = NULL;    node *head = NULL;    int num;    printf("enter number:");    do{        scanf("%d",&num);        if (num != -1){            p1 = (node*)malloc(sizeof(node)); // 申请内存,也可以使用p1 = new node,但是要改成free释放            p1->num = num;            if (head == NULL)                head = p1; // 指针相等:指向同一片内存。所以对任意一者操作,另一者的使用也会受牵连,毕竟是同一个内存            else                last->next = p1; // 本质上是head这个索引下的链表的变化,把P1这个结构放在最后面            last = p1; // last 向下指一位,保证last是最后一位        }    }while(num != -1);    last->next = NULL;    return head;}node* prtLLst(node *p){    if(p != NULL){        printf("%d  ",p->num);if(p->next != NULL)return prtLLst(p->next);elsereturn false;}}void freeLst(node *p){ // 貌似不好用迭代的写法。。先这样,回头再看看    node *q = NULL;    while(p != NULL){printf("free%d  ",p->num);        q = p;        p = p->next;        free(q);    }}


0 0
原创粉丝点击