线性表的链式存储(链表)
2013-02-27 15:08
295 查看
线性表的顺序存储结构最大的缺点是:插入和删除时需要移动大量的元素,这显然需要耗费时间,链式存储结构解决这个问题。
注意第15行代码,如果不是*L则会出错,原因:参数传递中,指针本身不改变
#include<iostream> using namespace std; typedef int ElemType; const int OK = 1; const int ERROR =0; const int TRUE = 1; const int Flase =0; typedef int Status; typedef struct Node { ElemType data; struct Node *next; }Node,*LinkList; void CreateHead(LinkList *L,int n)//在函数体内指针本身也需要修改,所以这里的L是指向指针的指针 { srand(time(0));//初始化随机数种子 (*L)=(LinkList)malloc(sizeof(Node)); (*L)->next = NULL; LinkList p; for(int i=0;i<n;i++) { p=(LinkList)malloc(sizeof(Node)); p->data = rand()%100+1; p->next = (*L)->next; (*L)->next = p; } } void CreateTail(LinkList *L,int n) { srand(time(0)); (*L)=(LinkList)malloc(sizeof(Node)); (*L)->next = NULL; LinkList p,r; r=*L; for(int i=0;i<n;i++) { p=(LinkList)malloc(sizeof(Node)); p->data = rand()%100+1; r->next=p; r=p; } p->next = NULL;//r->next = NULL; } /*初始条件:顺序线性表L已存在,1<=i<=ListLength(L)*/ /*操作结果:用e返回L中第i个数据元素的值*/ Status GetElem(LinkList L,int i,ElemType *e) { Node *p; p=L->next; int j=1;//因为参数i表示第i个元素,所以j的下标从1开始。 while(j<i && NULL!=p) { p=p->next; ++j; } if(NULL==p || j>i) return ERROR; *e = p->data; return OK; } /*操作结果:在第i个位置后面插入新的数据元素e,L的长度加1*/ Status ListInsert(LinkList *L,int i,ElemType e) { Node *p; p=(*L)->next; int j=1; while( j<i && NULL!=p ) { p=p->next; ++j; } if(NULL==p || j>i) return ERROR; Node *s = (Node*)malloc(sizeof(Node)); s->data=e; s->next=p->next; p->next=s; return OK; } Status LinkListDelete(LinkList *L,int i,ElemType *e) { Node *p; p=(*L)->next; int j=1; while( j<i && NULL!=p ) { p=p->next; ++j; } if(NULL==p || j>i) return ERROR; Node *q; q = p->next; *e = q->data; p->next = q->next; free(q); return OK; } Status ClearList(LinkList *L) { Node *p,*q; p=(*L)->next; while(NULL!=p) { q=p->next; free(p); p=q; } (*L)->next =NULL; return OK; } void PrintLinkList(LinkList list) { Node *p; p=list->next; while(NULL!=p) { cout<<p->data<<" "; p=p->next; } cout<<endl; } int main() { LinkList La; CreateHead(&La,10); cout<<"La:"; PrintLinkList(La); ElemType e; GetElem(La,6,&e); cout<<"GetElem(La,6,&e):"<<e<<endl; ListInsert(&La,6,66); cout<<"ListInsert(&La,6,66):"; PrintLinkList(La); LinkListDelete(&La,6,&e); cout<<"LinkListDelete(&La,6,&e):"; cout<<"(e: "<<e<<") "; PrintLinkList(La); ClearList(&La); cout<<"after ClearList():"; PrintLinkList(La); getchar(); }结果:
注意第15行代码,如果不是*L则会出错,原因:参数传递中,指针本身不改变
相关文章推荐
- Java基础 - 线性表之链式存储结构-双向链表
- 线性表的链式存储——链表(带源码)
- 线性表的链式存储格式基本操作:创建链表、插入、删除、查找、求表长、打印链表
- 2008秋季-线性表的链式存储(仅单链表)
- 第一部分 线性表的链式存储(四)--单循环链表
- 线性表的链式存储——链表(带源码)
- 线性表的Java实现--链式存储(单向链表)
- 线性表之链式存储结构_单链表相关算法
- 数据结构与算法(二)-线性表之单链表顺序存储和链式存储
- 线性表的链式存储结构--链表
- 结构之美:线性表的链式存储结构——链表
- 数据结构一一线性表的链式存储结构之头插法和尾插法建立链表
- 【Data_Structure笔记2】线性表的链式存储【单链表】
- 数据结构之线性表——链表的链式存储(链式描述)注释版
- 数据结构之线性表-链式存储之静态链表(二)
- 数据结构复习——线性表的链式存储实现(单向链表)
- 线性表的链式存储(单链表)的基本操作
- 结构之美:线性表的链式存储结构——链表
- 2.3_线性表的链式存储结构_单链表
- 结构之美:线性表的链式存储结构——链表