线性表的链式存储(链表)
来源:互联网 发布:阿里云os 魅族 编辑:程序博客网 时间:2024/05/17 23:01
线性表的顺序存储结构最大的缺点是:插入和删除时需要移动大量的元素,这显然需要耗费时间,链式存储结构解决这个问题。
#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则会出错,原因:参数传递中,指针本身不改变
- 线性表的链式存储(链表)
- 线性表的链式存储(LinkList)
- 线性表的链式存储结构(链表)
- 线性表的链式存储
- 线性表的链式存储
- 线性表的链式存储
- 线性表的链式存储
- 线性表的链式存储
- 线性表的链式存储
- 线性表的链式存储
- 线性表的链式存储
- 《线性表的链式存储》
- 线性表的链式存储
- 线性表的链式存储
- 线性表的链式存储
- 线性表的链式存储
- 线性表的链式存储
- 线性表的链式存储
- 二维的射线跟踪
- 从PC总线到ARM的内部总线
- 根据网络连接模式,激活网络
- C++解一元二次方程。以字符串ax^2+bx+c=d(d>=0)的形式输入
- 关于学习DDR2时值得一看的资料
- 线性表的链式存储(链表)
- android 模拟器不能关闭 和 ubuntu没有声音的 完美解决方案
- outlook接收邮件时间设置
- pycurl和urllib2的比较
- HDU-1619-Unidirectional TSP
- android 进程通信
- 股份与期权的分配示例
- IOS 开发环境,证书和授权文件
- 名企招聘经典面试编程题集锦[第1-10题]