求大大们具体描述下C语言中的结构体和链表(最好能用图表描述)
这是一个完全没有错误的程序
#include
#include
#include
#define ElemType int
#define OK 1
#define ERROR 0
typedef struct Node
{
ElemType data;
struct Node *next;
} Node,*LinkList;
//初始化单链表
void InitList(LinkList *L)
{
*L=(LinkList)malloc(sizeof(Node));
(*L)->next=NULL;
}
//建立单链表
//头插法建表
void CreatFromHead(LinkList L)
{
Node *s=L;
char m[5];
int c;
int flag=1;
while(flag)
{
scanf("%s",m);
if(m[0]!='$')
{
c=atoi(m);
s=(Node*)malloc(sizeof(Node));
s->data=c;
s->next=L->next;
L->next=s;
}
else
flag=0;
}
}
//查找
//按序号查找
Node *GetElem(LinkList L,int i)
{
int j=0;
Node *p;
p=L;
if(i<0)
{
printf("无值!");
return NULL;
}
while(p->next!=NULL&&j<i)
{
p=p->next;
j++;
}
if(i==j)
return p;
else
{
printf("无值!");
return NULL;
}
}
//按值查找
Node *Locate(LinkList L,ElemType key)
{
Node *p=L->next;
while(p!=NULL)
if(p->data!=key)
p=p->next;
else
break;
return p;
}
//求单链表长度
int ListLength(LinkList L)
{
int i=0;
Node *p=L->next;
while(p!=NULL)
{
i++;
p=p->next;
}
return i;
}
//插入操作
int InsList(LinkList L,int i,ElemType e)
{
int j=0;
Node *s;
Node *p=L;
if(i>ListLength(L))
{
printf("插入位置错误");
return ERROR;
}
while(p!=NULL&&j<i-1)
{
j++;
p=p->next;
}
if(!p)
{
printf("插入位置不合理
");
return ERROR;
}
s=(Node *)malloc(sizeof(ElemType));
s->next=p->next;
s->data=e;
p->next=s;
return OK;
}
//删除操作
int DelList(LinkList L,int i,ElemType *e)
{
Node *p=L;
Node *s;
int j=0;
while(p->next!=NULL&&j<i-1)
{
j++;
p=p->next;
}
if(!(p->next))
{
printf("删除位置错误
");
return ERROR;
}
s=p->next;
*e=s->data;
p->next=s->next;
free(s);
return OK;
}
//显示所有数据元素
void DispList(LinkList L)
{
Node *p=L->next;
if(p->next==NULL)
printf("无元素!");
else
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("
");
}
void main()
{
//void InitList(LinkList *L)
//void CreatFromHead(LinkList L)
//void CreatFrom(LinkList L)
//Node *GetElem(LinkList L,int i)
//Node *Locate(LinkList L,ElemType key)
//int ListLength(LinkList L)
//int InsList(LinkList L,int i,ElemType e)
//int DelList(LinkList L,int i,ElemType *e)
//void DispList(LinkList L)
struct Node T;
LinkList p=&T;
int e;
InitList(&p);
CreatFromHead(p);
DispList(p);
printf("这个位置的数据为:%d
",*GetElem(p,3));
InsList(p,3,10);
DispList(p);
printf("共有 %d 个元素
",ListLength(p));
DelList(p,1,&e);
DispList(p);
printf("被删除的元素为:%d
",e);
printf("地址为%d
",Locate(p,3));
}
. 表示成员运算符,前面必须是变量
->表示指向运算符,前面必须是指针
如:
struct A
{ int a,b }m,*p;
p=&m;
要引用m中的a成员,可以这样写:
1、 m.a
2、 p->a
3、 (*p).a
定义结构体使用struct修饰符,例如:
struct test
{
float a;
int b;
};
2)链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而顺序表相应的时间复杂度分别是O(logn)和O(1)。
在计算机科学中,链表作为一种基础的数据结构可以用来生成其它类型的数据结构。链表通常由一连串节点组成,每个节点包含任意的实例数据(data fields)和一或两个用来指向明上一个/或下一个节点的位置的链接("links")。链表最明显的好处就是,常规数组排列关联项目的方式可能不同于这些数据项目在记忆体或磁盘上顺序,数据的访问往往要在不同的排列顺序中转换。而链表是一种自我指示数据类型,因为它包含指向另一个相同类型的数据的指针(链接)。链表允许插入和移除表上任意位置上的节点,但是不允许随机存取。链表有很多种不同的类型:单向链表,双向链表以及循环链表。
一万六千字详解C语言struct 结构体与 union 共用体
在C语言中,结构体(struct)与联合体(union)是用于描述复杂数据类型的重要工具。结构体允许定义包含多种不同类型的成员的复合数据类型,类似于将多个变量封装在一个"文件夹"中。使用struct关键字定义结构体时,必须先声明它,然后可以定义结构体变量。结构体的成员可以是不同类型的变量或数组,成员通过点号...
请教C语言中struct的用法
在C语言中,结构体(struct)是一种用户自定义的数据类型,它可以包含不同类型的成员,如整型、字符型、指针等。首先,需要声明一个结构体,定义其具体形式。例如:struct mydata { int i; char c; char *p; char arr[10]; struct mydata *selfp; }; 这里定义了一个名为mydata的结构体,包含...
C语言中,&结构体是什么操作呢
2.2 定义结构体变量 struct Student student1;1 以上就定义了一个Student类型的结构体变量student1,这个变量就可以代表一个学生,他拥有姓名、年龄、成绩这三个成员。2.3 结构体成员引用 结构体不能进行整体的输入和输出,需要对成员分别操作,这称为结构体变量成员引用。格式如下:结构体变量名.成员...
struct在c语言中是什么意思?
三、struct的应用场景 结构体在C语言编程中非常常见,特别是在处理复杂数据和需要组合多种类型数据的场合。例如,在编写处理员工信息的程序时,可以使用结构体来存储员工的姓名、年龄、地址和薪资等信息。通过结构体,可以方便地对这些数据进行操作和管理。此外,结构体还可以用于实现数据结构如链表、树等复杂...
C语言,结构体
struct在C语言中是一个关键字,用于定义结构数据类型。问题中的两种定义的区别在于第一种是给student数据类型,重新定义了一个类型别名,而第二种则单纯的表示一种叫做student的数据结构类型。两者的主要区别在于后面直接定义变量时。如下代码,则可以直接在结构体后面定义一个zhang_san的结构体变量。struct?
C语言结构体定义
C语言中的结构体定义,我们以"struct student"为例。首先,通过typedef关键字,我们可以为这个结构体类型创建一个新的标识符,比如将其重命名为"student"。这样,"struct student"和"student"就代表了同一个结构体类型,就像将整型变量int重命名为zhengshu一样。例如,下面的代码:typedef struct student {...
C语言——结构体
枚举类型使用`enum`关键字,列举所有可能,内部有值,无初始化默认从0开始。联合(共用体)使用`union`关键字,成员共享同一块内存。联合体大小计算,可能是最大类型大小,需对齐。以上内容覆盖了C语言结构体的基本概念、声明、内存管理、传参、位段实现、枚举与联合体的使用,提供对结构体操作的全面理解...
C语言的结构体及指针
结构体就像数组一样,其中的数据是有互相联系的,有些情况下定义一些简单的变量是不能反映出数据之间的内在联系,所以我们就把这些数据组合成一个项,而这个项中包含着很多不同的数据项,这就是结构体。简单理解下,就是说把一些有内在联系的不同变量放在一起封装成一个整体,这就是结构体。指针,其实...
C语言中构造类型数据指什么
它是一种聚合类型,可以包含多种数据类型,甚至可以包含嵌套的结构体。在定义结构体时,struct是一个关键的字,标志着结构类型定义的开始。结构类型说明符可以是int、float、char等任何数据类型。花括号内列出了构成结构的各个组成部分。结构体在C语言中的应用十分广泛,它可以用来描述复杂的数据对象,如时间...
C语言的结构体和共同体的区别是什么?
具体来说,结构体(structure)与共同体(union)主要有以下区别:1.结构体(structure)与共同体(union)都是由多个不同的数据类型成员组成, 但在任何同一时刻, 共同体(union)中只存放了一个被选中的成员, 而结构体(structure)的所有成员都存在。在结构体(structure)中,各成员都占有自己的内存...