2022.1.23

2022.1.23,第1张

2022.1.23

线性表

1.零个或者多个数据元素的有限序列。

2.序列中每一个元素的关系都是一对一的。

3.当传递一个参数给函数的时候,这个参数会不会在函数内被改动决定了使用什么参数形式。

        3.1 如果需要被改动,则需要传递指向这个参数的指针

        3.2 如果不用被改动,可以直接传递这个参数。

4.线性表有顺序存储结构(数组)和链式存储结构(链表)。

主要说链表

链表

1.链表与数组的区别:

数组查找数据方便,O(1),删除和添加数据复杂,O(n);

链表查找数据复杂,O(N),删除和添加数据简单,O(1);

2.链表必须要有头指针。

3.单向链表有一个数据域,一个指针域

struct node{
	int data;
	struct node *next;
}linklist; 

双向链表有一个数据域,两个指针域

struct node{
	int data;
	struct node *next;
	struct node *pre;
}linklist; 

4.链表的插入

int insert(linklist j,int i,int t)//i为要插入的位置,t为要插入的数
{
	int j;
	linklist p,t;
	p=j;
	j=1;
	while(p!=NULL&&jnext;
		j++;	
	} 
	if(p==NULL||j>i)//第i个元素不存在
	return 0;
	t=(linklist *)malloc(sizeof(struct node));
	t->data=e;
	t->next=p->next;//向后再前 
	p->next=t;
    return 1;
} 

头插法

void creat(linklist p)
{
	int n,i,m;
	scanf("%d",&n);
	linklist t;
	p=(linklist *)malloc(sizeof(struct node));//申请空间
	p->next=NULL;//建立一个带头结点的单链表
	for(i=0;idata=m;
		t->next=p->next;
		p->next=t;//插入到表头
	}
}

尾插法

void creat(linklist p)
{
	int n,i,m;
	scanf("%d",&n);
	linklist t,r;
	p=(linklist *)malloc(sizeof(struct node));
	r=p;//r指向整个链表 
	for(i=0;inext=t;
		r=t;//连接链表 
	}
	r->next=NULL;//链表结束,最后一个点的下一个点要为NULL 
}

5.链表的删除

int insert(linklist j,int i)//i为要插入的位置
{
	int j;
	linklist p,t;
	p=j;
	j=1;
	while(p->next!=NULL&&jnext;
		j++;	
	} 
	if(p->next==NULL||j>i)//第i个元素不存在
	return 0;
	t=p->next;
	p->next=t->next;
	free(t);
	return 1;
} 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5711059.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存