维基百科:
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;
}