新手谁能教一下我数据链表的创建与运用啊!
哪位大神能教小弟一下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; }