@Arbalest-Laevatain
2018-10-17T02:29:57.000000Z
字数 1953
阅读 872
数据结构
单链表即只能向一个方向的遍历的链表,换句话说,就是只有一个指针(域)(指向后面或前面),单链表是最简单的链表。
又因为在单链表中,每次读取元素,都要从头结点开始,故单链表是一种非随机存取的存储结构
typedef struct LNodes{ElemType data;struct LNodes *next;} LNodes,*LinkList;
if (p!=NULL){p->data=10;p->next=NULL;}
LinkedList LinkedListInit() {Node *L;L = (Node *)malloc(sizeof(Node)); //申请结点空间if(L == NULL) { //判断是否有足够的内存空间printf("申请内存空间失败\n");}L->next = NULL; //将next设置为NULL,初始长度为0的单链表return L;}//单链表的建立1,头插法建立单链表LinkedList LinkedListCreatH() {Node *L;L = (Node *)malloc(sizeof(Node)); //申请头结点空间L->next = NULL; //初始化一个空链表ElemType x; //x为链表数据域中的数据while(scanf("%d",&x) != EOF) {Node *p;p = (Node *)malloc(sizeof(Node)); //申请新的结点p->data = x; //结点数据域赋值p->next = L->next; //将结点插入到表头L-->|2|-->|1|-->NULLL->next = p;}return L;}
Status printElement(Elemtype e){printf("%c",e); //假设是char类型return OK;}
void TraverseLinkList(LinkList L,Status(*visit)(ElemType e)){LNode *p;p=L;while (p!=NULL){visit(p->data);p=p->next;}}
demo02
#include <stdio.h>#include <stdlib.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -1typedef int Status;//结点定义typedef struct LNodes{int data;struct LNodes *next;} *LinkList;LinkList chushihua(){LNodes *L;L = (struct LNodes *) malloc (sizeof(struct LNodes)); //申请头结点空间//L->data = 0;L->next = NULL; //初始化一个空链表int x; //x为链表数据域中的数据while (scanf_s("%d", &x) != EOF){struct LNodes *p;p = (struct LNodes *)malloc(sizeof(struct LNodes)); //申请新的结点p->data = x; //结点数据域赋值p->next = L->next; //将结点插入到表头L-->|2|-->|1|-->NULLL->next = p;}return L;}Status printElement(int e){printf("%d\n", e); //假设是int类型return OK;}void bianli(struct LNodes *L){struct LNodes *p;p = L->next;while (p != NULL){if (printElement(p->data))p = p->next;}free(L);free(p);}int main(){struct LNodes *L;int n;L=chushihua();bianli(L);//printf("%d\n",scanf_s("%d",&n));return 0;}
这时我们应该借用一维数组来定义:
#define Maxsize 1000typedef struct{ElemType data;int cur; //数组下标,来代替指针}compnent,SLinkList[Maxsize];
这种链表,与前面的不一样为静态线性链表。
与单链表唯一的区别在于,最后一个结点的后继指向头结点,但就这一个区别,就会造成后后面有很多地方与单链表不同。
与单链表对应的,双链表是同时可以向前又可以向后遍历的链表,即同时具有两个指针(一前一后)