單向無頭鏈表的基本操作

      對於單向無頭鏈表的基本操作有創建一個鏈表,銷燬,從尾部加一個數進去,從頭加一個數進去,從尾部刪去一個,從頭部刪去一個,以及放回這個鏈表的長度。具體的實現並不難,只是一個簡單的邏輯,需要注意的點就是,在進行尾部插入和刪除的時候,一定要記得對最後的一個節點的next置爲NULL,這樣才能保證print函數和Size函數正常進行。

#include <stdio.h>
#include <stdlib.h>

typedef struct List
{
	int date;
	struct List* next;

}List;
void InitList(List *ls)
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		ls->date = i;
		ls->next = (List *)malloc(sizeof(List));
		ls = ls->next;
	}
	ls->date = i;
	ls->next = NULL;

}
List *PushFront(List *ls,int date)
{
	List * tmp = (List *)malloc(sizeof(List));
	tmp->date = date;
	tmp->next = ls;
	return tmp;
}
List *PopFront(List *ls)
{
	List *tmp = ls;
	ls = ls->next;
	free(tmp);
	return ls;
}
void PushBack(List *ls, int date)
{
	while (ls->next)
	{
		ls = ls->next;
	}
	ls->next = (List *)malloc(sizeof(List));
	ls->next->date = date;
	ls->next->next = NULL;
	
}
void PopBack(List *ls)
{
	while (ls->next->next)
	{
		ls = ls->next;
	}
	free(ls->next);
	ls->next = NULL;

}
void PrintList(List *ls)
{
	while (ls->next)
	{
		printf("%d ", ls->date);
		ls = ls->next;
	}
	printf("%d ", ls->date);
	printf("\n");
}
void FreeList(List *ls)
{
	if (ls)
	{
		List *tmp;
		while (ls->next)
		{
			tmp = ls->next;
			free(ls);
			ls = tmp;
		}
		free(ls);
		ls = NULL;
	}
}
int Size(List *ls)
{
	int num = 1;
	while (ls->next)
	{
		num++;
		ls = ls->next;
	}
	return num;
}
void main()
{
	List *ls = (List *)malloc(sizeof(List));
	int date = 23;
	InitList(ls);

	ls = PushFront(ls,date);
	ls =PopFront(ls);
	PushBack(ls,date);
	PopBack(ls);
	PrintList(ls);
	printf("%d\n", Size(ls));
	FreeList(ls);


	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章