离散存储

mac2022-06-30  87

链表的定义:

      链表也是一种线性表,它的数据的逻辑组织形式是一维的。链表的物理存储结构使用一组地址任意的存储单元存储数据的。在链表中每个结点可以是一个结构体元素,当然也可以是其他构造类型元素。在链表的每一个结点中,有一个专门用来存档指针的域,用这个指针来存放后继结点的地址。       一个链表通常有一个表头,它是一个指针变量,用来存放第一个结点的地址。此外,链表的最后一个结点的指针域要置空(NULL),因为它没有后继结点。 一个链表的结点可以使用以下代码描述: typedef struct Node { int data; /*数据域*/ struct Node * next; /*指针域*/ } NODE, *PNODE;

创建一个链表:

#include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef struct Node { int data; /*数据域*/ struct Node * pNext; /*指针域*/ } NODE, * PNODE; PNODE create_list(void); void traverse_list(PNODE); int main(void) { PNODE pHead= NULL; pHead = create_list(); //创建一个非循环单链表 return 0; } PNODE create_list(void) { int len; int i; int val; PNODE pHead = (PNODE)malloc(sizeof(NODE)); if(NULL == pHead) { printf("分配失败!\n"); exit(-1); } PNODE pTail = pHead; pTail->pNext = NULL; printf("请输入链表的长度:len = "); scanf("%d",&len); for(i=0;i<len;i++) { printf("请输入第 %d 个结点的值:",i+1); scanf("%d",&val); PNODE pNew = (PNODE)malloc(sizeof(NODE)); if(NULL == pHead) { printf("分配失败!\n"); exit(-1); } pNew->data = val; pTail->pNext = pNew; //pTail指向最后一个结点 pNew->pNext = NULL; pTail = pNew; } return pHead; }

遍历链表:

void traverse_list(PNODE pHead) { PNODE p = pHead->pNext; while(NULL != p) { printf("%d ",p->data); p = p->pNext; } printf("\n"); }

判断链表是否为空:

int is_empty(PNODE pHead) { if(NULL == pHead) { printf("链表为空!\n"); return 1; } else { return 0; } }

计算链表的长度:

int length_list(PNODE pHead) { PNODE p = pHead->pNext; int len = 0; while(NULL != p) { len++; p = p->pNext; } return len; }

转载于:https://www.cnblogs.com/xpeng-V/p/7349672.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)