程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 非循環單鏈表的遍歷

非循環單鏈表的遍歷

編輯:關於C語言
  鏈表的遍歷過程
  1. 定義p使其指向第一個有效的結點
  2. 當p不為NULL時,向輸出p指向結點的數據域,再使p指向下一個有效結點
  3. 假設鏈表有效結點數為3個,如下圖所示
非循環單鏈表的遍歷 - wj86843248 - 別摸我

#include <stdio.h>
#include <malloc.h> //包含malloc函數
#include <stdlib.h> //包含exit函數

typedef struct Node
{
int data; //數據域
struct Node *pNext; //指針域
}NODE, *PNODE; //NODE等價於struct Node, PNODE等價於struct Node *

//函數聲明
PNODE creat_list(void);
void traverse_list(PNODE);

int main(void)
{
PNODE pHead = NULL; //等價於struct Node * pHead = NULL

pHead = creat_list(); //創建一個非循環單鏈表
traverse_list(pHead); //遍歷整個鏈表

return 0;
}

PNODE creat_list(void)
{
int len; //鏈表的節點個數
int i;
int val; //臨時存放用戶數據

PNODE pHead = (PNODE)malloc(sizeof(NODE)); //分配了一個不存放有效數據的頭節點
if (NULL == pHead)
{
printf("分配失敗!程序終止!");
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 == pNew)
{
printf("分配失敗!程序終止!");
exit(-1);
}
pNew->data = val;
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;
}

return pHead;
}

void traverse_list(PNODE pHead)
{
PNODE p = pHead->pNext;

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

return;
}

/*********************************************************************************
請輸入鏈表節點個數:len = 5
請輸入第1個節點的值:1
請輸入第2個節點的值:2
請輸入第3個節點的值:3
請輸入第4個節點的值:4
請輸入第5個節點的值:5
1 2 3 4 5
*********************************************************************************/

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved