离散存储_链表
鏈表的定義:
鏈表也是一種線性表,它的數據的邏輯組織形式是一維的。鏈表的物理存儲結構使用一組地址任意的存儲單元存儲數據的。在鏈表中每個結點可以是一個結構體元素,當然也可以是其他構造類型元素。在鏈表的每一個結點中,有一個專門用來存檔指針的域,用這個指針來存放后繼結點的地址。 一個鏈表通常有一個表頭,它是一個指針變量,用來存放第一個結點的地址。此外,鏈表的最后一個結點的指針域要置空(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
總結
- 上一篇: php empty();和isset()
- 下一篇: IIS 7 及以上 IIS错误页“编辑功