1. 程式人生 > 其它 >2.3 建立線性表(尾插操作)

2.3 建立線性表(尾插操作)

#include <iostream>
#include <stdlib.h>

typedef struct LNode {
	int data;
	LNode *next;
}*LinkList;

int main() {
	int a[6] = { 23,43,35,21,54,65 };
	//初始化單鏈表
	LinkList L;
/*
	L = (LinkList)malloc(sizeof(LNode));
	if (L!=NULL)L->next = NULL;
*/
	bool InitLinkList(LinkList & L);
	InitLinkList(L);

	//使用尾插法建立單鏈表
	/*
		1.申請一個空間
		2.p指向該空間
		3.給該空間的data賦值
		4.p指向新申請的空間
		5.s->next=p
	*/
/*
	LNode *p,*s;
	s = L;
	for (int i = 0; i < 6; i++)
	{
		p = (LNode *)malloc(sizeof(LNode));
		if (p != NULL) {
			p->data = a[i];
			p->next = NULL;
			s->next = p;
			s = p;
		}
	}
*/
	LinkList CreateLinkList(LinkList L, int data[], int length);
	CreateLinkList(L, a, 6);


	//輸出單鏈表
	void PrintLinkList(LinkList L);
	PrintLinkList(L);
	return 0;
}

//初始化連結串列
bool InitLinkList(LinkList &L) {
	L = (LinkList)malloc(sizeof(LNode));
	if (L == NULL) return false;
	L->next = NULL;
	return true;
}

//尾插操作實現
LinkList CreateLinkList(LinkList L,int data[],int length) {
	LNode* p, * s;
	s = L;
	for (int i = 0; i < length; i++)
	{
		p = (LNode*)malloc(sizeof(LNode));
		if (p != NULL) {
			p->data = data[i];
			p->next = NULL;
			s->next = p;
			s = p;
		}
	}
	return L;
}

//輸出連結串列函式
void PrintLinkList(LinkList L) {
	LNode* p;
	p = L->next;
	while (p != NULL)
	{
		printf("%d\t", p->data);
		p = p->next;
	}
}