链表的简单创建及使用

//
//  ViewController.m
//  Link_list_Demo
//
//  Created by 张凯泽 on 16/5/10.
//  Copyright © 2016年 rytong_zkz. All rights reserved.
//

#import "ViewController.h"
struct Link_list{
    int data;
    struct Link_list * Pnext;
};
struct Link_list * head_list;
//创建链表 head节点
bool creatLink_list()
{
    head_list = (struct Link_list*)malloc(sizeof(struct Link_list));
    if (head_list == NULL) {
        return false;
    }else{
        head_list ->data = 0;
        head_list ->Pnext = NULL;
        return true;
    }

}
//增加节点从尾部添加
bool addLink_list(struct Link_list * note)
{
    //没有头节点
    if (head_list == NULL) {
        return false;
    }
    //只有头节点
    if (head_list ->Pnext == NULL) {
        head_list->Pnext = note;
        note ->Pnext = NULL;
        return true;
    }
    //有两个节点
    struct Link_list * p = head_list ->Pnext;
    struct Link_list * temp = head_list;
    while (p != NULL) {
        temp = p;
        p = p ->Pnext;

    }
    temp->Pnext  = note;
    note ->Pnext = NULL;

    return true;

}
//插入
bool insertLink_list(struct Link_list * note)
{
    if (head_list == NULL) {
        return false;
    }
    struct Link_list * p = head_list;

    note->Pnext = p->Pnext;
    p -> Pnext = note;
        return true;

}

//删除
bool deleteLink_list(int index)
{
    if (head_list == NULL) {
        return false;
    }
    struct Link_list * p = head_list ->Pnext;
    int lenth = 0;
    while (p != NULL) {
        lenth ++;
        p = p->Pnext;

    }
    if (lenth<index) {
        return false;
    }else{
    struct Link_list * q = head_list;
        p = head_list;
        for (int i = 0; i <index; i++) {
            q = p;
            p = p ->Pnext;

        }

        q ->Pnext = p ->Pnext;
        free(p);
        return true;

    }

}
//销毁链表
void destroyNodeList()
{
    //没有头节点
    if (head_list == NULL) {
        return;
    }
    //只有头节点
    if (head_list ->Pnext == NULL) {
        free(head_list);
        return;
    }
    //两个节点以上者(包括两个节点)
    struct Link_list * p = head_list->Pnext;
    // = NULL;
    while (p != NULL) {
        struct Link_list * q = p;
        p = p->Pnext;
        free(q);
    }
    free(head_list);
    head_list = NULL;
}
// 展示
void showLink_list()
{
    if (head_list == NULL) {
        return ;

    }
    struct Link_list * p = head_list;
    while (p != NULL) {
        NSLog(@"%p-----%d",p,p ->data);
       p = p ->Pnext;

    }

}
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    creatLink_list();

    struct Link_list * note1 = (struct Link_list*)malloc(sizeof(struct Link_list));
    note1 ->data = 1;
    addLink_list(note1);

    struct Link_list * note2 = (struct Link_list*)malloc(sizeof(struct Link_list));
    note2 ->data = 2;
    addLink_list(note2);

    struct Link_list * note3 = (struct Link_list*)malloc(sizeof(struct Link_list));
    note3 ->data = 3;
    addLink_list(note3);

    struct Link_list * note4 = (struct Link_list*)malloc(sizeof(struct Link_list));
    note4 ->data = 4;
    addLink_list(note4);

    showLink_list();
    //destroyNodeList();
    deleteLink_list(2);
    showLink_list();

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
时间: 2024-11-06 21:26:30

链表的简单创建及使用的相关文章

数据结构概述&lt;3&gt;链表的简单应用

今天介绍两个链表的简单应用. 1.约瑟夫问题 假设有N个人决定选出一个领导人,方法如下:所有人排成一个圆圈,按顺序数数,每次数到第M个人出局,此时,他两边的人靠拢重新形成圆圈.问题是找出哪一个人将会是最后剩下的那个人.下列程序依次读入N和M,并给出最终结果. #include <stdlib.h> #include <stdio.h> typedef struct node* link; struct node { int item; link next; }; int main(

单链表的简单c++实现

以下代码只实现了单链表的手动创建以及输出功能 #include<iostream> using namespace std; struct node { int data; node *next; }; class list { public: void creat(); void show(); private: node *head; }; void list::creat() //创建链表 { node *f=new node(); //建立链表的第一个元素 f->data=44;

Linux 内核 链表 的简单模拟(2)

接上一篇Linux 内核 链表 的简单模拟(1) 第五章:Linux内核链表的遍历 /** * list_for_each - iterate over a list * @pos: the &struct list_head to use as a loop cursor. * @head: the head for your list. */ #define list_for_each(pos, head) for (pos = (head)->next; pos != (head);

循环双链表的简单实现

<span style="font-size:18px;"><strong>//代码为自己编写,可能有问题,欢迎大家留言指正!</strong></span> <span style="font-size:18px;"><strong> </strong></span> #include <iostream> #include <string> u

链表的简单实现

1 #include <cstdio> 2 #include <cassert> 3 4 typedef struct node { 5 int data; 6 node * next; 7 }Node, *pNode; 8 9 pNode CreateList() { 10 pNode head, p1, p2; 11 p1 = new Node; 12 printf("Please input data: \n"); 13 scanf("%d&qu

linux_DNS服务器(正解/反解)的简单创建

什么是DNS? DNS(Domain Name System) 域名系统.它是如今互联网上能够相互通信的服务之一,对于现在的互联网特别特别重要的,因为在这个人们不能很好记忆数字IP地址的问题上,输入IP地址来访问其他的主机是很困难的,和不现实的,如果数字IP地址用我们所熟悉的各种名称(字符,例如:baidu taobao 等)就很好记忆啦.DNS就是来完成这个解析的功能的. DNS工作的原理: 首先,我们先了解一个内容,例如www.baidu.com, www.baidu.com 在DNS中是有

js 中对象的简单创建和继承

对象的简单创建 1.通过对象直接量创建 比如 var obj = {}; 2.通过new 创建 比如 var obj = new Object(); // 相当于var obj = {}; var arr = new Array(); 3.使用 Object.create() 这个方法有两个参数,第一个参数是这个对象的原型,第二个参数用以对对象的属性进行进一步描述(可选) var obj = Object.create({x:1}); var obj1 = Object.create(null)

Linux 内核 链表 的简单模拟

第零章:扯扯淡 出一个有意思的题目:用一个宏定义FIND求一个结构体struct里某个变量相对struc的编移量,如 struct student { int a; //FIND(struct student,a) 等于0 char b; //FIND(struct student,b)等于4 double c; }; 参考答案:#define FIND(type,member) ((size_t)&((type*)0)->member) 我这样理解(可能不太正确): (type*)0,0在

c# 单链表实现 简单示例(可复制直接运行)

最近学习数据结构,发现c# 其实和c 的链表的实现差不多的 下面是一段可直接运行的代码 1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.Threading; 5 6 namespace SingleLinkedList 7 { 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 13 //实例调用