//基于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");
}
}
数据结构顺序表的链式存储
于 2022-04-18 22:16:24 首次发布