新手谁能教一下我数据链表的创建与运用啊!
哪位大神能教小弟一下C语言链表的概念与创建呢 ,万分感谢!
程序代码:说道数据结构中的链表,真的不是一时半会儿能说完的,这是一个相对标准有关链表的程序,简单的写了,创建,插入元素,求链表长度,和输出者几个函数。
链表可以说是数据结构中最基础,同样也是相当重要的,建议lz多花点时间去研究一下,仔细去斟酌。
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
}Node;
typedef struct Node *LinkList;
/* 初始化顺序线性表 */
Status InitList(LinkList *L)
{
*L = (LinkList)malloc(sizeof(Node)); /* 产生头结点,并使L指向此头结点 */
if(!(*L)) /* 存储分配失败 */
return ERROR;
(*L)->next = NULL; /* 指针域为空 */
return OK;
}
/*长度*/
int ListLength(LinkList L)
{
int i = 0;
LinkList p = L->next; /* p指向第一个结点 */
while(p)
{
i++;
p = p -> next;
}
return i;
}
/*插入元素*/
Status ListInsert(LinkList *L,int i,ElemType e)
{
int j;
LinkList p, s;
p = *L;
j = 1;
while (p && j < i) /* 寻找第i个结点 */
{
p = p->next;
++j;
}
if (!p || j > i)
return ERROR; /* 第i个元素不存在 */
s = (LinkList)malloc(sizeof(Node)); /* 生成新结点(C语言标准函数) */
s->data = e;
s->next = p->next; /* 将p的后继结点赋值给s的后继 */
p->next = s; /* 将s赋值给p的后继 */
return OK;
}
/* 依次对L的每个数据元素输出 */
Status ListTraverse(LinkList L)
{
LinkList p = L->next;
while(p)
{
visit(p->data);
p = p->next;
}
printf("\n");
return OK;
}
Status visit(ElemType c)
{
printf("%d ",c);
return OK;
}
int main(void)
{
LinkList L;
int i;
int len = 0;
i = InitList(&L);
scanf("%d", &i);
while (i != -1)
{
i = ListInsert(&L, 1, i);
scanf("%d", &i);
}
printf("在L的表头一次输入的数据是:L.data = ");
ListTraverse(L);
len = ListLength(L);
printf("该链表的长度:%d\n", len);
return 0;
}







