C语言—单链表
单链表操作:读取,插入和删除
#include "stdafx.h"
#include <string.h>
#include <stdio.h>
#include <stdlib.h> struct Node
{
int val;
struct Node *next;
}; // build No head node
struct Node * build_N_LinkList(int a[], int len)
{
struct Node * phead = NULL; //struct Node * phead, last;
struct Node * last = NULL;
int k;
for (k = ; k <=len-; k++)
{
struct Node * pnewnode = (struct Node *)malloc(sizeof(struct Node));
pnewnode->val = a[k];
pnewnode->next = NULL;
if (k == )
{
phead = pnewnode;
/*last->next = pnewnode;*/
last = pnewnode;
}
else
{
last->next = pnewnode;
last = pnewnode;
}
}
return phead;
} //build Head node
struct Node *build_H_LinkList(int a[], int len )
{
struct Node * headnode = (struct Node *)malloc(sizeof(struct Node));
int k;
struct Node * phead = NULL;
struct Node * plast = NULL;
for (k = ; k <= len - ; k++)
{
struct Node * newnode = (struct Node *)malloc(sizeof(struct Node));
newnode->val = a[k];
newnode->next = NULL;
if (k == )
{
headnode->next = newnode;
phead = headnode;
plast = newnode;
}
else
{
plast->next = newnode;
plast = newnode;
}
}
return phead;
} // read with no head node
int GetElem(struct Node *phead, int i)
{
int k = i;
struct Node * p;
p = phead;
if (NULL==p) //这就是为什么很多时候常量(NULL)写在前面的原因,一旦写成“=”,编绎器就会报错,就可以直接看出来 ,你以后会经常看到这种写法
return -;
while (k != )
{
p = p -> next;
--k;
}
return p->val;
} //insert element before ith. (no head node)//放在最后一个算插入么???
int ListInsert_N (struct Node *phead, int a, int i, int len)
{
int k =,m;
struct Node *p = phead;
struct Node *pr = phead;
struct Node *newnode = (struct Node*)malloc(sizeof (struct Node));
newnode->val = a;
newnode->next = NULL;
if (i <= || i > len + ) //either first or last
return -;
else if (i==) //first
{
newnode->next = p;
pr = newnode;
}
else //1 < i <= len+1, middle&last
{ while (k<i-)
{
p = p-> next;
++k;
}
newnode ->next = p->next;
p->next = newnode;
}
len = len + ;
for (m = ; m <= len; m++)
{
printf("%d\n", pr->val);
pr = pr->next;
}
return ;
} //insert element before ith. (with head node)
int ListInsert_H(struct Node *phead, int a, int i, int len)
{
struct Node * p = phead;
struct Node * pr = phead;
struct Node *newnode = (struct Node *)malloc(sizeof(struct Node));
newnode->val = a;
newnode->next = NULL;
int k = ;
int m;
if (i <= || i > len + )//
return -;
else
{ while (k < i)//i==len+1 : add in last.
{
p = p ->next;
++k;
}
//此时p指向啥?第i个节点?k==i,退出循环,p指向i?
newnode->next = p->next;
p->next = newnode;
} len = len + ;
for (m = ; m <= len; m++)
{
pr = pr->next;
printf("%d\n", pr->val);
}
return ;
} // delete element before ith (No head node)
int ListDelete_N(struct Node *phead, int i, int len)
{
int k;
int m;
struct Node *p = phead;
struct Node *q = NULL;
struct Node *pr = phead;
if (i <= || i > len)
return -;
else if (i == )
{
q = p;
pr = p->next;
free(q);
}
else
{
k = i-;
while (k != )
{
p = p->next;
--k;
}
q = p->next;
p->next = q->next;
free(q);
}
len = len - ;
for (m = ; m <= len; m++)
{
printf("%d\n", pr->val);
pr = pr->next;
}
return ;
} //delete element before ith (Head node)
int ListDelete_H(struct Node * phead, int i, int len)
{
struct Node *p = phead;
struct Node *pr = phead;
struct Node *q = NULL;
int k,m ;
if (i <= || i > len)
return -;
else
{
k = i - ;
while ( k != )
{
p = p->next;
--k;
}
q = p->next;
p->next = q->next;
free(q);
}
len = len - ;
for (m = ; m <= len; m++)
{
pr = pr->next;
printf("%d\n", pr->val);
} } int main()
{
int a[] = { ,,,, };
int len,tmp;
struct Node * phead; len = sizeof(a) / sizeof(a[]); //注意:是sizeof(a),不是sizeof(a[])。
phead = build_H_LinkList(a, len); //注意:是a,不是a[]。
//phead = build_N_LinkList(a, len); //注意:是a,不是a[]。
//ListInsert_H(phead,8,2,len);
//ListInsert_N(phead, 8, 6, len);
//ListDelete_N(phead, 5,len);
ListDelete_H(phead, , len);
//tmp = GetElem(phead, 3);
//printf("%d\n", tmp);
}
C语言—单链表的更多相关文章
- C语言单链表实现19个功能完全详解
谢谢Lee.Kevin分享了这篇文章 最近在复习数据结构,想把数据结构里面涉及的都自己实现一下,完全是用C语言实现的. 自己编写的不是很好,大家可以参考,有错误希望帮忙指正,现在正处于编写阶段,一共将 ...
- C语言——单链表初始化、求表长、读表元素、插入元素
头文件Linear.h // 单链表的类型定义 typedef struct node { int data; // 数据域 struct node *next; // 指针域 }Node, *Lin ...
- c语言-单链表(二)
继续复习链表知识点,本章包含单链表的增加,删除,判断是否为空,和链表长度,以及链表的排序 几个知识点 1.链表的判断是否为空 //1.判断链表是否为空 bool isempty_list(PNODE ...
- c语言单链表实现
/************************************************************************* > File Name: singleLin ...
- C语言单链表的实现
// // main.c // gfhjhgdf // // Created by chenhao on 13-12-23. // Copyright (c) 2013年 chenhao. A ...
- c语言-单链表(一)
定义节点: typedef struct Node { int data; Node* pNext; }NODE, *PNODE; 细节说明,PNode 就代表struct Node* ,上面的表单是 ...
- 零基础玩转C语言单链表
下图为最一简单链表的示意图: 第 0 个结点称为头结点,它存放有第一个结点的首地址,它没有数据,只是一个指针变量.以下的每个结点都分为两个域,一个是数据域,存放各种实际的数据,如学号 num,姓名 n ...
- c语言——单链表分拆——头插法创建链表,尾插法生成链表
#if 1 #include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; ...
- C语言单链表简单实现(简单程序复杂化)
PS: goto还是很好玩的. #include <stdio.h> #include <stdlib.h> typedef struct _node{ int value; ...
随机推荐
- MySQL导出表结构方法
方法一: 以下用的是Navicat Premium,可以换成任意图形化客户端 SELECT COLUMN_NAME 列名, COLUMN_TYPE 数据类型, DATA_TYPE 字段类型, CHAR ...
- Android 把url生成二维码并贴到给定的底图上
主要是用到了com.google.zxing jar包生成二维码的功能,这个jar包需要自己接下载 直接上代码 public static Bitmap CreateBinaryCodeImageBy ...
- ABP 开发(一)
rh 最近搞Angular ,使用Abp+Angular建项目,遇到部分问题,记录一下,以备查: 一.Abp官网: https://aspnetboilerplate.com/ 点Get starte ...
- Python 基础 高阶函数
python 把函数作为参数 如果传入abs 作为参数 def add(x,y,y): return f(x) + f(y) add(-5,9,abs) 根据函数的定义,函数执行的代码实际上是. ab ...
- solr 服务器搭建(Linux版)
1.下载访问linux工具 securcrt 链接:https://pan.baidu.com/s/1zTwzmnzUmnwbKUCNHCLN1g 密码:kpyg 2.下载所需的 jdk so ...
- underscore.js常用方法整理(慢慢完善)
整理自Underscore.js (1.8.3) 中文文档,http://www.css88.com/doc/underscore/ 1. extend _.extend() 复制对象中的所有属性到目 ...
- php 计算两个日期相差天数
<?php $startdate=strtotime("2013-3-09"); $enddate=strtotime("2013-4-05"); $da ...
- exynos4412—链接脚本复习
在u-boot下,定义变量, 编译,编译完后 使用arm-linux-nm arm 没有去头的二进制可执行文件 都在BSS段,均为初始化. 打印之后会出算随机值. 目前还处于uboot阶段,如 ...
- django的Cookie-9
设置Cookie 可以通过HttpResponse对象中的set_cookie方法来设置cookie. HttpResponse.set_cookie(cookie名字, value=cookie值, ...
- 转 关于window10安装jdk,配置环境变量,javac不是内部或外部命令,也不是可运行的程序 或批处理文件的细节问题。
今日拿到一台新的window10笔记本电脑,非常熟练的安装了JDK(因为在学校经常给同学安装JDK - -)但是发现java java -version命令都可以使用,唯独javac命令出现不是内部或 ...