数据结构第二版(朱昌杰版)五

上一篇讲到线性表的顺序存储实现方式

接了下来就是链式存储的实现了:先讲链式存储的优势,在插入和删除的时候非常方便,但是对于空间的申请具有不确定性
正片开始
结构的定义

typedef struct Node{
	int data;
	struct Node;
}LNode,*LinkList;

详解如下:这个上面的Node就是它的名字,没有啥作用,除了在这里定义外,木有其他的屁儿用
LNode相当于是它的结构体的类型,如同int的用法,后面使用它的时候如同LNode *p;而LinkList就是它的结构体指针,用法如
同 int *,示例:LinkList p;这个是等同于前面的那个p定义的一样
当然还得要申请一块空间,它才是正真的存在

p=(*LinkList)malloc(sizeof(LNode));

接下来就是常见的操作

insertLinkList();
deleteLinkLiist();
queryLinkList();
updataLinkList();

插入

//在第n个位置插入元素P
void insertLinkList(LinkList L,int n,LNode p){
	int i=0;
	LNode *q;
	q=L;
	for(i;i<L.length;i++)
		q=q->next;
		if(i==n-2){
				p=q->next->next;
				p->next=q;
		}
		
}

删除操作

//删除第n个位置上的元素
void deleteLinkList(LinkList L,int n){
	int i=0;
	LinkList *p=L;
	if(L.length-1<n){
		return 0;
	}else{
		for(i;i<L.length;i++)
			p=p->next;
			if(i==n-2){
				p->next=p->next->next;
			}
	}
}

查询也一样
p=p->next;
当前的p->data=data1;返回需要的数据
修改也是一样
查询到要替换的元素,前面的Q=P->next->next;p->next=Q;

写一个初始化的函数吧

void initLinkList(LinkList L){
	L=(LinkList)malloc(sizeof(LNode));
	//初始化头部
//1、带头节点
L-next=null;
//非头节点就是自己就是元素之一,一般建议是使用带头结点的,因为,总是需要一个flag或者其他的东西去辅助;
}

两种插入方法
1、头插法;如 L 1 、L 2 1、 L 3 2 1、L 5 3 2 1;
2、尾插法:如L 1 、 L 1 2 、L 1 2 3 、L 1 2 3 5;

算法1:单链表的转置:

#include <stdio.h>
#include <stdlib.h>
typedef struct {
	int data;
	struct Node *next;
}LNode,*LinkList;

int main(){
	
//	Node *p;
	LinkList L = (LinkList)malloc(sizeof(LNode));
	LNode *head=L;
	int i=0;
	for(i;i<5;i++){
			LNode *p = (LinkList)malloc(sizeof(LNode));
			scanf("%d",&p->data);
			head->next=p;
			head=head->next;
			
	}
	
	revese(L);
	LNode *h=L->next;
	for(i=0;i<5;i++){
		printf("%d\n",h->data);
		h=h->next;
	}
	
	
} 
void revese(LinkList L){
	LNode *p1;
	LNode *q;
	p1=L->next;
	L->next=NULL;
	while(p1){
		q=p1;
		p1=p1->next;
		q->next=L->next;
		L->next=q;
	}
		
	
}

提醒一下,变量名字别重复,无论是在哪个方法里面,不要重复,反正问题多多;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值