链表的建立、赋值、输出、查找、增、删

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h> 
typedef struct node{		//定义结构体 
	int num;   				// 存数据 
	struct node *next;		//递归(定义结构体指针) 
}Node,*LinkList;			//自定义 

LinkList InitList()			//建立头结点 
{
	LinkList head;			//head为头结点 
	head=(Node*)malloc(sizeof(Node));		//给头结点分配空间 
	head->next=NULL;						//初始化指向NULL 
	return head;
}

void creat(Node* head,int i)				//建立链表 
{
	Node *s;								//指针s,r 
	Node *r;
	s=(Node*)malloc(sizeof(Node));
	s->num=1;
	head->next=s;							//与头结点连接 
	for(int j=1;j<i;j++)
	{
		r=(Node*)malloc(sizeof(Node));		//循环建立 
		r->num=j+1;							//赋初值 
		s->next=r;							//让连起来 
		s=r;
	}
	s->next=NULL; 							//结束 NULL 
	
}
void output(Node* head)          //输出 
{
	Node *p;					//用结构体指针指向 不断地后移输出 
	p=head->next;
	while(p)
	{
	printf("%d ",p->num);
	p=p->next ;
	}
	printf("\n");
}
LinkList search(Node *head,int i)  //寻找第i个,(从一开始) 
{
	int count=1;
	Node *p;
	p=head->next;
	while(count!=i)
	{
		p=p->next;
		count++;
	 } 
	 return p;
 } 
 
 void add(Node *head,int x,int i)			//在i个元素前增加 ,赋值为x 
 {
 	Node *q,*p;
 	p=(Node*)malloc(sizeof(Node));
 	p->num=x;
 	q=search(head,i-1);
 	p->next=q->next;
 	q->next=p;
 }
 void delet(Node*head,int i)			//删去第i个元素 
 {
 	Node *p,*q;
 	p=search(head,i-1);					//只有前一个的next发生改变 
 	q=p->next;
 	p->next=q->next;                	//或者写成(p->next=p->next->next;) 
 	free(q);							//最后不要忘记释放 
 }
int main()
{
	LinkList head,p;
	head=InitList();
	creat(head,6);
	output(head);
	p=search(head,3);
	printf("%d\n",p->num);
	add(head,99,3);
	output(head);
	delet(head,3);
	output(head);
	free(head);
	return 0;
}

简单写了一个,很水的链表,带头结点。

因为很简单,注释应该都可以看懂,就不多说了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值