1. 程式人生 > >迴圈單鏈表的建立,遍歷和銷燬

迴圈單鏈表的建立,遍歷和銷燬

迴圈單鏈表的簡單操作

因為迴圈單鏈表和單鏈表的插入,刪除等操作大同小異 ,因此我只總結了迴圈連結串列的建立,遍歷以及銷燬操作
迴圈連結串列的定義

//定義一個單鏈表
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;
}

歡迎大家的評論