單鏈表建立與遍歷
不連續的儲存結構
包含n個節點,每個節點包含資料域和指標域,指標域指向下一個節點
下述連結串列指單鏈表。。
頭結點只有指標域,是整個連結串列入口,相關的遍歷查詢都需要從頭指標開始,頭結點資料域沒有意義為一個隨機值
#include "stdafx.h"
#include <stdio.h>
#include<iostream>
using namespace std;
//建立
typedef struct student
{
int data;
student * Next;
}Node,*pNode;
Node* CreateList(void)
{
int len;
int val;
pNode pEnd=NULL;
pNode pHead = (Node*)malloc(sizeof(Node));
pEnd = pHead; //尾指標先指向頭節點,在此基礎上增加新節點
pEnd->Next = NULL; //此時只有一個頭結點,頭結點的next指標指向NULL
printf("please input the len:");
scanf("%d",&len);
for(int i=0;i<len;i++)
{
printf("請輸入第 %d 個節點的資料:", i + 1);
scanf("%d",&val);
pNode pNew =(Node*)malloc(sizeof(Node)); //給新節點分配記憶體
pNew->data = val; //給新節點賦值
pNew->Next=NULL; //新節點下一個先為空
pEnd->Next= pNew; //尾指標的指標域指向新增加的節點
pEnd = pNew; //尾指標指向新節點,新節點變成尾節點
}
printf("list create success");
return pHead;
}
//遍歷
void printlist(pNode phead)
{
pNode p = phead->Next;
while(p)
{
cout<<p->data<<endl; //通過尾節點的指標域是否為空判斷連結串列是否已結束
p =p->Next;
}
}
void main()
{
pNode mHead = CreateList();
printlist(mHead);
cin.get();
cin.get();
}
其餘啥的刪除、反轉等操作均在此基礎上進行,有點繞但並不複雜,F10、F11多單步執行就行
多想點問題,一個人的矯情都是閒出來的。。