第一次写C语言链表的增删改查

原创 2015年07月06日 22:45:31
<span style="font-size:14px;color:#990000;"><strong>这是我第一次写链表的增加删除,学习数据结构,学习算法,是一个程序员必经之路,所以我来了,虽然还有很多的不足,但是这个代码就是一个基础,不仅会使我对php的理解更加深刻,而是我对程序有了另外一种看法,一切皆数据结构的原理。</strong></span>
<span style="font-size:14px;color:#990000;"><strong>#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//¶¨Òå½á¹¹ÌåÖ¸Õë
struct node
{	
	int key;
	int num;
	struct node *next ;
} ;

typedef struct node node_type ;
node_type *create()
{
	node_type *head=NULL,*tail=NULL,*p=NULL ;
	int key,num ;
	int count=0;
	while(count<1000)
	{	
		p = (struct node *)malloc(sizeof(struct node)) ;
		if(head == NULL)
		{
			head = tail = p ;
		}
		else
		{
			tail->next = p ;
			tail = p ;
		}
		key = count ;
		num = 100 + count ;
		p->key = key ;
		p->num = num ;
		p->next = NULL;
		count++ ;
	}

	return head ;
}	


node_type *search_list(node_type *head,int search_num)	//²éÕÒ·µ»Ø²éÕÒµ½µÄ½Úµã£¬×¢ÒâÕâÀïÈç¹ûÓжà¸öÔªËØ·ûºÏ²éÕÒÌõ¼þ£¬ÕâÀï¾Í²»¿¼ÂÇÁË£¬Ö»ÊÇÔÚÕâÀïÁ·Ï°Ð´´úÂë¶øÒÑ
{
	node_type *p ;
	p = head ;

	while(p != NULL)
	{
		if(search_num == p->num)
			return p ;
		p = p->next ;
	}
	return NULL;
}

//寻找上一个节点
node_type *find_previous(node_type *head,int search_num)
{
	node_type *p ;
	p = head ;
	while(p->next !=NULL && p->next->num != search_num)
		p = p->next ;

	return p ;

}

node_type *delete_list(node_type *head,int num)	//Á´±íµÄɾ³ýÂß¼­¾ÍÊÇ°ÑÇ°ÃæÒ»¸öµÄÖ¸ÕëÈƹý²éÕÒµ½µÄ½Úµã
{	
	//这里做参数的检验
	node_type *tmp_node ;
	node_type *p ;
	p = find_previous(head,num) ;
	if(p == NULL)
		return ;
	tmp_node = p->next ;
	p->next = tmp_node->next ;
	free(tmp_node) ;
	return head ;
}

node_type *update_list(node_type *head,int key,int num)
{
	node_type *p ;
	p = head ;
	while(p!=NULL)
	{
		if(p->key == key)
			p->num = num ;
	}
	return head ;
}

node_type *add_list(node_type *head,int num)  //在指针的尾部插入一个节点
{
	node_type *p ;
	node_type *new_node ;
	p = head ;
	while(p->next != NULL)
	{
		p = p->next ;
	}
	//出来的就是p->next= NULL的指针节点
	new_node = (struct node *)malloc(sizeof(struct node)) ;
	if(new_node == NULL)
		return NULL; 
	p->next = new_node ;
	new_node->key = p->key +1 ;
	new_node->num = num ;
	new_node->next = NULL ;
	return head ;
}


print_list(node_type *head) //´òÓ¡Á´±í
{
	node_type *p ;
	p = head;
	while(p != NULL)
	{
		printf("%d=>%d \n",p->key,p->num);
		p = p->next ;
	}
}
void main()
{	
	node_type * head;
	node_type *search;
	node_type *del ;
	int num ;
	head = create();
	print_list(head);

	printf("please input a num to search \n") ;
	scanf("%d",&num) ;
	search = search_list(head,num) ;
	printf("search->key=%d,search->num=%d \n",search->key,search->num) ;

	printf("please input delete num \n");
	scanf("%d",&num);

	del = delete_list(head,num) ;
	print_list(del) ;

	printf("please input a num to add \n");
	scanf("%d",&num);
	del = add_list(del,num) ;

	print_list(del) ;
}</strong></span>
下面是一个双向链表的例子,珍惜现在机会,好好学习,为自己的事业奋斗,虽然现在只是一个程序员,要能吃苦.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


typedef struct node *node_type;
struct node //这里是一个双向链表的数据结构
{
<span style="white-space:pre">	</span>int num ;
<span style="white-space:pre">	</span>node_type prev ; //指向头的节点指针
<span style="white-space:pre">	</span>node_type next ; //指向下一个节点的指针
} ;




print_list(node_type head) //´òÓ¡Á´±í
{
<span style="white-space:pre">	</span>node_type p ;
<span style="white-space:pre">	</span>p = head;
<span style="white-space:pre">	</span>while(p != NULL)
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>printf("p->num=%d \n",p->num);
<span style="white-space:pre">		</span>p = p->next ;
<span style="white-space:pre">	</span>}
}


node_type create()
{
<span style="white-space:pre">	</span>node_type head ;
<span style="white-space:pre">	</span>node_type tail;
<span style="white-space:pre">	</span>node_type p ;
<span style="white-space:pre">	</span>int count = 1 ;
<span style="white-space:pre">	</span>head =tail=p= (node_type)malloc(sizeof(struct node)) ;
<span style="white-space:pre">	</span>if(head == NULL)
<span style="white-space:pre">		</span>return NULL ;
<span style="white-space:pre">	</span>while(count<=10)
<span style="white-space:pre">	</span>{<span style="white-space:pre">	</span>
<span style="white-space:pre">		</span>if(count == 1)
<span style="white-space:pre">		</span>{
<span style="white-space:pre">			</span>head->num = 100 ;
<span style="white-space:pre">			</span>head->prev = head->next = NULL ;
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>else
<span style="white-space:pre">		</span>{
<span style="white-space:pre">			</span>p = (node_type)malloc(sizeof(struct node)) ;
<span style="white-space:pre">			</span>if(p == NULL)
<span style="white-space:pre">				</span>continue ;


<span style="white-space:pre">			</span>p->num = 10*count;
<span style="white-space:pre">			</span>tail->next = p;
<span style="white-space:pre">			</span>p->next = NULL;
<span style="white-space:pre">			</span>p->prev =  head;
<span style="white-space:pre">			</span>head->prev = p ;
<span style="white-space:pre">			</span>tail = p ;
<span style="white-space:pre">		</span>}


<span style="white-space:pre">	</span>
<span style="white-space:pre">		</span>count++ ;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>return head ;
}




void main()
{<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>node_type head;
<span style="white-space:pre">	</span>head  = create() ;
<span style="white-space:pre">	</span>print_list(head);
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

单链表的增删改查实现

概述链表:通过一组任意的存储单元来存储线性表的数据,这组存储单元可以是连续或不连续的, 每个节点包括 数据域(当前节点的数值) 指针域(存储下一个节点的位置) 各个节点通过指针域串起来,像一条链子,...
  • xi_2130
  • xi_2130
  • 2016年01月28日 20:32
  • 3449

c语言-指针实现链表增删改查

通过指针实现链表增删改查。 1.首先定义宏以及结构体作为数据结构使用。 #define LEN sizeof(struct student) struct student{ long num...
  • u012569119
  • u012569119
  • 2015年08月28日 23:48
  • 2095

用C语言实现简单的数据库增删改查功能

  • 2011年11月21日 08:46
  • 25KB
  • 下载

C#编写简单的数据库增删改查(一)

数据库增删改查 今天我们用C#编写一个简单的数据库的增删改查!
  • qq_36963759
  • qq_36963759
  • 2017年04月06日 13:42
  • 346

C#增删改查代码大全

  • 2010年04月22日 11:55
  • 22KB
  • 下载

c 语言写的一个单链表 支持增、删、改、查、保存... 单链表的神器啊

  • 2013年08月06日 19:07
  • 8KB
  • 下载

c语言版学生成绩管理 数据结构单链表实现

  • 2013年03月10日 16:34
  • 615KB
  • 下载

【C】利用单链表数据结构实现通讯录,链表的增删改查

C语言中实现链表,是需要利用到C语言中比较难的结构体与指针才能实现。 结构体中放一个指向后接节点的指针与每一个结点应该存放的信息。 下面做一个命令行的通讯录来说明链表的增删改查这个问题。 一开始让用户...
  • yongh701
  • yongh701
  • 2015年08月07日 17:25
  • 4730

单链表c语言实现增删改查操作

  • 2012年09月21日 18:16
  • 1.97MB
  • 下载

第一次写C语言链表的增删改查

这是我第一次写链表的增加删除,学习数据结构,学习算法,是一个程序员必经之路,所以我来了,虽然还有很多的不足,但是这个代码就是一个基础,不仅会使我对php的理解更加深刻,而是我对程序有了另外一种看法,一...
  • baixiaoshi
  • baixiaoshi
  • 2015年07月06日 22:45
  • 2489
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第一次写C语言链表的增删改查
举报原因:
原因补充:

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