链表

链表在数据结构中不难但是用的很多也算是数据结构中必须掌握的内容;数据结构学了很久了,现在写一些也当做是回顾吧,都说数据结构重要;

每次都是,除了代码好像就么有什么可写的了,哎;

反正就是跟线性表类似,毕竟都是线性结构;

把原先连续的储存单元换成了分散的节点,每一个节点分为数据域和指针域;

数据域存放数据,指针域存放下一个节点的地址,注意下一个节点在物理存储上不一定挨着的;

我们在遍历一个链表的时候是靠节点的指针域找到下一个节点的,就这样遍历到了所有的节点;

很多时候我们喜欢设一个头结点(非首节点,首尾是相对的),头结点就在首节点前面一个节点;

这个头结点的数据域用来储存整个链表的节点个数,指针域存放首节点的地址,在很多时候很方便做一些操作,更多好处百度一下就会有;

下面这个代码我依然是加了一个头结点:

#include<stdio.h>
#include<malloc.h>
typedef struct Node
{
	int data;
	struct Node* next;
}*List;
void Initialization(List p)//初始化
{
	p->data=0;
	p->next=NULL;
}
void Add(List p)//添加
{
	p->data++;
	while(p->next!=NULL)
		p=p->next;
	List pNext=new struct Node;
	//p=(List)malloc(sizeof(struct Node));
	scanf("%d",&pNext->data );
	pNext->next=NULL;
	p->next=pNext;
}
void Show(List p)//输出
{
	p=p->next;
	while(p!=NULL)
	{
		printf("%d\n",p->data);
		p=p->next;
	}
}
void Insert(List p,int index,int e)//插入
{
	if(index>p->data)
	{
		p->data++;
		while(p->next !=NULL)
			p=p->next;
		List pNext=new struct Node;
		pNext->data=e;
		pNext->next=NULL;
		p->next=pNext;
	}
	else
	{
		puts("2\n");
		p->data++;
		for(int i=0;i<index-1;++i)
			p=p->next;
		List NEW=new struct Node;
		NEW->data=e;
		NEW->next=p->next;
		p->next=NEW;
	}
}
void Sort(List p)   //排序
{
	List x,y;
	int len=p->data;
	for(int i=0;i<len;++i)
	{
		p=p->next;
		x=p;
		y=p->next;
		for(int j=i+1;j<len;++j)
		{
			if(x->data>y->data )
				x=y;
			y=y->next;
		}
		int tmp;
		if(x->data!=p->data )
		{
			tmp=p->data;
			p->data=x->data;
			x->data=tmp;
		}
	}
}
int main()
{
	List pos;
	pos=new struct Node;
	Initialization(pos);
	for(int i=0;i<3;++i)
		Add(pos);
	Insert(pos,2,90);
	Show(pos);
	Sort(pos);
	Show(pos);
	return 0;
}
//比起上篇写的线性表加了一个排序,采用了选择排序,其他功能和线性表差不多,如果对照起来理解的话会跟清晰;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值