数据结构顺序表的链式存储

//基于VS2013实现C语言的链式存储
//首先,我们要创建一个顺序表,使用链式结构存储在计算机中
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
//思路:一个指针指向存储头结点的位置称为头指针,头结点中的指针域存储首元结点的位置,头指针的数据域可以为
//空,也可以为其他信息
typedef struct lian{
	int a;
	struct lian *arr;
}Lnode,*Linkline;
//函数的声明与定义
void InitLnoda(Lnode *L);
int Guess(Lnode *L);
void Destroy(Lnode *L);
int Long(Lnode *L);
int Chat(Lnode *L);
int Chatt(Lnode *L);
void InitLnoda(Lnode *L){
//简单粗暴,直接将头结点的指针域设为NULL
	L->arr = NULL;
	L->a = 0;
}
int Guess(Lnode *L){
	if (L->arr == NULL){
		return 1;
	}
	else{
		return 0;
	}
}
void Destroy(Lnode *L){
	Linkline arr1  = (Linkline)malloc(sizeof(L));
	arr1 = L->arr;
	while (1){
		L->arr = L->arr->arr;
		if (L->arr == NULL){
			free(L->arr);
			break;
		}
		free(L->arr);
	}
}
int Long(Lnode *L){
	int a = 0;
	do{
		L->arr = L->arr->arr;
		a++;
	} while (L->arr != NULL);
	return a;
}
int Chat(Lnode *L){
	printf("请您输入要查找元素位置:\n");
	int a;
//范围为你建立的数据个数,在这里我们建立了三个数据,所以,范围为1到3
	while (1){
		scanf("%d", &a);
		if (a >= 1 && a <= 3){
			break;
		}
		else{
			printf("抱歉,请输入1到3之间的数字\n");
		}
	}
	int b = 0;
	for (b; b < a; b++){
		L->a = L->arr->a;
		L->arr = L->arr->arr;
	}
	return L->a;
}
int Chatt(Lnode *L){
	printf("请输入您要查找的数据:\n");
	int c;
	scanf("%d", &c);
	int b = 0;
	for (b; b < 2; b++){
		L->a = L->arr->a;
		if (c== L->a){
			return b + 1;
			break;
		}
		L->arr = L->arr->arr;
	}
	return 0;

}
int main(){
//创建一个头指针,并且进行赋值,避免成为野指针
	Linkline arr1;
	Lnode L;
	arr1 = (Linkline)malloc(sizeof(L));
	arr1 = &L;
//接下来,创建一个头结点,头结点中的数据域代表存储3个数据
	L.a = 6;
	L.arr = (Linkline)malloc(sizeof(L));
//最后,创建一个首元结点,数据域为一,指针域为下一个数据的位置
	L.arr->a = 0;
	L.arr->arr = (Linkline)malloc(sizeof(L));
//接下来,是一些重复的操作,依次存储三个数据,这是第二个数据
	L.arr->arr->a=1;
	L.arr->arr->arr = (Linkline)malloc(sizeof(L));
//这是第三个数据,注意一点,最后一个数据的指针域为空
	L.arr->arr->arr->a = 2;
	L.arr->arr->arr->arr =NULL;
//基本的链式存储结构存储完成,接下来是实现一些基本操作与一些复杂的操作
//链式存储的初始化,具有头结点,指针域为零
	InitLnoda(&L);
//判断链表是否为空,及判断头结点的指针域是否为NULL,为空返回1,反之,为0
	int x=0;
	x=Guess(&L);
	printf("%d\n", x);
//单链表的销毁,包括头结点,全部销毁
	Destroy(&L);
//求单链表的表长,并且返回其长度
	int y = 0;
	y=Long(&L);
	printf("%d\n", y);
//以上是简单的操作,接下来为一些复杂的操作,如:取值,查找,插入,删除等等
//取值,取单链表中第i个元素的内容,及其数值域
	int z = 0;
	z=Chat(&L);
	printf("%d\n", z);
//查找,根据用户输入的数据进行查找该数据所在的位置,若无该数据,返回0,反之,返回该数据位置
	int n = 0;
	n = Chatt(&L);
	if (n != 0){
		printf("找到该数据了\n");
		printf("%d\n", n);
	}
	else{
		printf("抱歉,你要查找的数据不在该数据范围之内,请重新输入\n");
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太原理工大学课设

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值