线性链表

原创 2015年07月09日 14:05:45
<span style="font-size:24px;">
#include<stdio.h>
#include<malloc.h>
typedef struct nnode{
int data;
struct nnode* link;}node;

node* create_list(int n);
void printf_list(node *p_head);
void insert_node(node *p_head,int val_data);
void add_node(node *p_head,int val_data);
void delete_node(node *head,node *p_head);

int main()
{
	node *head;
	head=create_list(4);
	printf_list(head);
	add_node(head,4);
	printf_list(head);
	insert_node(head->link,0);
	printf_list(head);
	delete_node(head,head->link->link);
	printf_list(head);
	return 0;
}

//create an n nodes list
node* create_list(int n)
{
	int i;
	node *head,*p,*q;		//if no head,we cann't return the adress of list head
	head =(node *)malloc(sizeof(node));
	p=head;
	p->data=0;
	for(i=1;i<n;i++)
	{
		q=(node *)malloc(sizeof(node));
		p->link=q;
		p=q;
		p->data = i;

	}
	q->link=NULL;
	return head;
}

//printf list which head is p_head
void printf_list(node *p_head)
{
	while(p_head->link != NULL)
	{
		printf("%d ",p_head->data);
		p_head=p_head->link;	
	}
	printf("%d\n",p_head->data);
}

//insert a node after p_head->link
void insert_node(node *p_head,int val_data)
{
	node *p;
	p=(node *)malloc(sizeof(node));
	p->data=val_data;
	p->link=p_head->link;
	p_head->link=p;
}

//add anode in the list which head is p_head
void add_node(node *p_head,int val_data)
{
	node *p;
	p=(node *)malloc(sizeof(node));
	while(p_head->link!=NULL)
		p_head=p_head->link;
	p_head->link=p;
	p->data=val_data;
	p->link=NULL;
}

//delete a node from list head in address p_head
void delete_node(node *head,node *p_head)
{
	while(head->link != p_head)
		head=head->link;
	head->link=head->link->link;
	free(p_head);
}</span>

线性链表的创建 C语言

我认为线性链表的创建主要需要以下几种: 1.需要一个结构体:有两部分组成,一部分用来表示节点的各个属性,另一部分是指针,用来指向下一个节点,只有这样才能构成线性; 2.定义一个头指针(head):用来...
  • qishubiao
  • qishubiao
  • 2015年07月21日 09:11
  • 740

线性链表的基本算法

最近补补数据结构,还是从最简单的线性链表开始。下面是线性链表的一些基本算法,留着以后翻案。下面的算法描述都是以字符串为数据元素。链表结构定义如下: typedef struct node { ...
  • CaryaLiu
  • CaryaLiu
  • 2011年11月24日 21:12
  • 8050

创建单线性链表的不同表示方法和操作

创建单线性链表,常见的有头插法、尾插法创建线性链表,常见的操作有:创建链表、查找、删除、增加元素、求逆链等操作。 这里首先才有头插法创建链表: //头指针唯一确定一个单链表 #define Max...
  • wqthaha
  • wqthaha
  • 2014年08月04日 16:03
  • 1351

创建和遍历单向线性链表(C)

链表(Linked List)是由节点组成的(node)。而节点实质上是一个数据结构(struct or class)。链表和数组(Array)的区别在于链表中的节点在内存中的位置不一定是连续的,并且...
  • czjuttsw
  • czjuttsw
  • 2012年12月23日 15:17
  • 2325

单向线性链表的实现

/* * 练习:实现单向线性链表 * list_append() - 追加 * list_size() - 测长 * list_print() - 正向打印 * list_rpr...
  • romancegirls
  • romancegirls
  • 2014年04月24日 17:20
  • 655

数据结构C语言版线性链表的12个基本操作

线性链表的12个基本操作 分别是:构造 销毁 清空      判空  表长 取元      定位  前驱 后继      插入 遍历;在此为了好记我分别二字短语三三结合 ,接下来会一一解释。 头文件和...
  • WLxinliang
  • WLxinliang
  • 2016年10月14日 23:00
  • 3278

java 用链表实现线性表

package com.jzm; public class MyLList { private Node firstNode; private int leng...
  • love_Ubuntu
  • love_Ubuntu
  • 2011年08月05日 22:42
  • 1138

线性链表的插入与删除

代码功能: 第一行给出线性表内现有数据元素的数目N,1 Output    在一行内按次序输出进行插入和删除后线性表的所有数据元素,数据元素之间用一个空格隔开。   Sampl...
  • qq_18062811
  • qq_18062811
  • 2014年08月12日 15:52
  • 1007

C++实现线性链表的基本操作

C++实现顺序结构线性表的基本操作
  • sinat_34474705
  • sinat_34474705
  • 2017年01月10日 13:55
  • 1563

C语言实现线性链表的19个功能

#include "stdafx.h" #include "stdio.h" #include #include "string.h" typedef int elemType ; /***...
  • u013190620
  • u013190620
  • 2016年02月15日 23:23
  • 2375
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:线性链表
举报原因:
原因补充:

(最多只允许输入30个字)