迴圈單鏈表的建立,遍歷和銷燬
阿新 • • 發佈:2018-12-22
迴圈單鏈表的簡單操作
因為迴圈單鏈表和單鏈表的插入,刪除等操作大同小異 ,因此我只總結了迴圈連結串列的建立,遍歷以及銷燬操作
迴圈連結串列的定義
//定義一個單鏈表
typedef struct LNode {
int data;
struct LNode* next;
}LNode, *LinkList;
虛幻連結串列的建立
//建立一個指定大小的迴圈連結串列
void CreateLoopList(LinkList* L, int n) {
if (n < 1) {
printf("輸入有誤\n");
return;
}
printf("請輸入 %d 個數據:" , n);
//建立頭結點
*L = (LinkList)malloc(sizeof(LNode));
if (!(*L)) {
exit(0);
}
LinkList rear = *L;
LinkList p = NULL;
for (int i = 0; i < n; ++i) {
p = (LinkList)malloc(sizeof(LNode));
if (!p) {
exit(0);
}
scanf("%d", &p->data);
rear->next = p;
rear = p;
}
//尾指標連到頭結點
rear-> next = *L;
}
迴圈連結串列的遍歷
//遍歷迴圈連結串列
void Traverse(LinkList L) {
LinkList adjust = L->next;
while (adjust != L) {
printf("%d ", adjust->data);
adjust = adjust->next;
}
printf("\n");
}
迴圈連結串列的銷燬
//銷燬迴圈連結串列
void Destroy(LinkList* L) {
//將迴圈連結串列變成單鏈表
LinkList adjust = (*L)->next;
(*L)->next = NULL;
*L = adjust;
while (*L != NULL) {
adjust = adjust->next;
free(*L);
*L = adjust;
}
}
測試
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
//定義一個單鏈表
typedef struct LNode {
int data;
struct LNode* next;
}LNode, *LinkList;
//建立一個指定大小的迴圈連結串列
void CreateLoopList(LinkList* L, int n) {
if (n < 1) {
printf("輸入有誤\n");
return;
}
printf("請輸入 %d 個數據:", n);
//建立頭結點
*L = (LinkList)malloc(sizeof(LNode));
if (!(*L)) {
exit(0);
}
LinkList rear = *L;
LinkList p = NULL;
for (int i = 0; i < n; ++i) {
p = (LinkList)malloc(sizeof(LNode));
if (!p) {
exit(0);
}
scanf("%d", &p->data);
rear->next = p;
rear = p;
}
rear->next = *L;
}
//遍歷迴圈連結串列
void Traverse(LinkList L) {
LinkList adjust = L->next;
while (adjust != L) {
printf("%d ", adjust->data);
adjust = adjust->next;
}
printf("\n");
}
//銷燬迴圈連結串列
void Destroy(LinkList* L) {
//將迴圈連結串列變成單鏈表
LinkList adjust = (*L)->next;
(*L)->next = NULL;
*L = adjust;
while (*L != NULL) {
adjust = adjust->next;
free(*L);
*L = adjust;
}
}
int main() {
LinkList L1;
CreateLoopList(&L1, 5);
Traverse(L1);
Destroy(&L1);
if (!L1) {
printf("OK\n");
}
system("pause");
return 0;
}
歡迎大家的評論