单链表的结构 输入 输出

链表图
只要知道指针的作用就课以简单理解:

#include<iostream>
using namespace std;
struct node 
{
	int date;
	node *next;
}
node *p,*r,*head;
int main()
{
	int x;
	cin >> x;
	head = new node;//申请头结点
	while(x!=0)//读入不等于0的数
	{
		p = new node;//申请一个新的结点
		p->date = x;
		p->next=NULL:
		r->next = p;//把新节点与前面的节点相连
		r = p;//为指针向后移动
		cin >> x;
	}
	p = head->next;//头指针没有数据,所以从第一个开始就好了
	while(p->next!=NULL)//因为最后一个指针是空指针。
	{
		cout<<p->date<<" ";
		p=p->next;
	} 
	cout<<p->date<<endl;//输出最后接结点的值也可以用do while语句
	return 0;
}

单链表的操作
1,查找满足一定条件的数据,

p = head->next;//头指针没有数据,所以从第一个开始就好了
	while(p->next!=NULL)//因为最后一个指针是空指针。
	{
		if();//写满足条件的数据,并处理它;
		p=p->next;
	} 

2,取出链表中的第i个数据;

p = head->next;//头指针没有数据,所以从第一个开始就好了
	while(p->next!=NULL&&j<i)//因为最后一个指针是空指针。
	{
		p=p->next;
		j++;
	} 

3,插入一个结点单链表中

//核心代码
void insert(node *head,int i,int x)//插入元素到第i个元素之前
{
	node *p,*s;
	int j;
	p = head;
	j = 0;
	while( p->next != NULL && j < i-1)
	{
		p = p->next;
		j++;
	}
	if(p == NULL)//也就是到尾结点也没有找到
		puts("no answer!");
	else
	{
		s = new node;
		s->date = x;
		s->next = p->next;//交换地址插入
		p->next = s;
	}
}

4,删除单链表的元素

//将上面添加结点的else换成如下代码

s = p->next;//将结点拿出
p->next = s->next;//p->next = p->next->next;//将链条和成一天去掉一定的位置的结点
free(s);//释放空间,

5,长度的遍历加1
就行了

posted @ 2019-12-05 16:13  ACWink  阅读(1433)  评论(0编辑  收藏  举报