//线性表的链式存储结构
typedef struct Node{
ElemType data;
struct Node *next;
}Node;
typedef struct Node *LinkList;
Status GetElem(LinkList L,int i,ElemType *e){//获取链表元素
int j;
LinkList p;
p = L->next;
j = 1;
while(j<i&&p){
p = p->next;
j++;
}
if(j>i||!p)
return ERROR;
*e = L->data;
return OK;
}
Status ListInsert(LinkList *L,int i,ElemType e){//链表插入
int j;
LinkList p,s;
p = *L;
j = 1;
while(j<i&&p){
p = p->next;
j++;
}
if(!p||j>i)
return ERROR;
s = (LinkList)malloc(sizeof(Node));
s->data = e;
s->next = p->next;
p->next = s;
return OK;
}
Status ListDelete(LinkList *L,int i,ElemType *e){//链表删除
int j;
LinkList p,q;
p = *L;
j = 1;
while(p&&j<i){
p = p->next;
j++;
}
if(!(p->next)&&j>i)
return ERROR;
q = p->next;
p->next = q->next;
*e = q->data;
free(q);
return OK;
}
//对于插入和删除数据越频繁的操作,单链表的效率优势就越是明显
void CreateListHead(LinkList *L,int n){//头插法。。。
LinkList p;
int i;
srand(time(0));//初始化随机数种子
*L=(LinkList)malloc(sizeof(Node));
(*L)->next = NULL;
for(i=0;i<n;i++){
p = (LinkList)malloc(sizeof(Node));
p->data = rand()%100+1;
p->next = (*L)->next;
(*L)->next = p;
}
}
void CreateListTail(LinkList *L,int n){//尾插法
LinkList p,r;
int i;
srand(time(0));
*L = (LinkList)malloc(sizeof(Node));//建立头结点
r = *L;//头结点就是尾节点
(*L)->next = NULL:
for(i=0;i<n;i++){
p = (LinkList)malloc(sizeof(Node));
p->data = rand()%100+1;
r->next = p;
r = p;
}
r->next = NULL;
}
Status ClearList(LinkList *L){
LinkList p,q;
p = (*L)->next;
while(p){
q = p->next;
free(p);
p = q;
}
(*L)->next = NULL;
return OK;
}
数据结构 第三季(part 2)
最新推荐文章于 2024-09-24 05:02:29 发布