线性表--- 链表

维基百科:

http://zh.wikipedia.org/wiki/%E9%93%BE%E8%A1%A8

线性表的链式存储结构

线性表顺序存储结构特点:

它是一种简单、方便的存储结构。它要求线性元素的数据元素依次存放在连续的存储单元中。

暴露的问题:

1. 在做插入或删除元素的操作时,会产生大量的数据元素移动。

2. 对于长度变化的线性表,要一次性地分配足够的存储空间,但这些空间常常又不到充分的利用。

3.线性表的容量难以扩充。

VC project 练习:

// link_list.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdlib.h>

typedef int ElemType;

typedef struct node {
	ElemType elem;
	struct node* next;
} NODE;

typedef struct {
	NODE *head;
} LINK_LIST;

int init_linklist(LINK_LIST* L)
{
	L->head = (NODE*)malloc(sizeof(NODE));
	if(L->head)
	{
		L->head->next = NULL;
		return 0;
	}
	else
		return 1;
}

void destorylist(LINK_LIST* L)
{
	NODE* p;
	while(L->head)
	{
		p = L->head;
		L->head = L->head->next;
		free(p);
	}
}

int listlength(LINK_LIST* L)
{
	int length = 0;
	NODE* p;

	for(p = L->head; p->next != NULL;p = p->next,length ++);
	return length;

}

int isListEmpty(LINK_LIST* L)
{
	if(L->head->next == NULL)
		return true;
	else
		return false;
}

ElemType getListElem(LINK_LIST* L,int iPosition)
{
	NODE* p;
	int i;

	for(i=0,p=L->head;i != iPosition; i++)
	{
		p = p->next;
	}

	return p->elem;
}

//insert element to the link list at the position of i
void ListInsert(LINK_LIST* L,int iPosition, ElemType elem)
{
	NODE* p,*q;
	int i;

	for(i=0, p=L->head; i < iPosition; p = p->next,i++);
	
	q = (NODE*)malloc(sizeof(NODE));

	q->elem = elem;
	q->next = p->next;
	p->next = q;
	
}

void ListGenerate(LINK_LIST* L)
{
	NODE* p,*q;
	int i;
	
	for(i=0,p = L->head;i<10;i++, p = p->next)
	{
		q = (NODE*)malloc(sizeof(NODE));

		q->elem = i;
		q->next = p->next;
		p->next = q;
	}	
}

int main(int argc, char* argv[])
{
	LINK_LIST* linklist_A;
	int i;
	
	linklist_A = (LINK_LIST*)malloc(sizeof(LINK_LIST));

	init_linklist(linklist_A);

	ListGenerate(linklist_A);

	//print linklist a content
	for(i=1;i<=listlength(linklist_A);i++)
		printf("%d\n",getListElem(linklist_A,i));

	ListInsert(linklist_A,6,200);

	//print linklist a content
	printf("==================== \n");
	for(i=1;i<=listlength(linklist_A);i++)
		printf("%d\n",getListElem(linklist_A,i));	//printf("Hello World!\n");

	system("pause");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值