线性表--链式存储
代码内容来自《大话数据结构》
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20
typedef int Status;
typedef int ElemType;
struct Node{
ElemType data;
struct Node* next;
};
typedef struct Node* LinkList;
Status visit(ElemType c){
printf("%d ",c);
return OK;
}
Status InitList(LinkList L){
L->next = NULL;
return OK;
}
Status ListEmpty(LinkList L){
if(L->next){
return FALSE;
}
return TRUE;
}
Status ClearList(LinkList L){
LinkList p,q;
p = L->next;
while(p){
q = p->next;
free(p);
p =q;
}
L->next = NULL;
return OK;
}
int ListLength(LinkList L){
int i = 0;
LinkList p = L->next;
while(p){
i++;
p = p->next;
}
return i;
}
Status GetElem(LinkList L,int i,ElemType *e){
int j;
LinkList p;
p = L->next;
j = 1;
while(p && j<i){
p = p->next;
j++;
}
if( !p || j>=i){
return ERROR;
}
*e = p->data;
return OK;
}
int LocateElem(LinkList L,ElemType e){
int i = 0;
LinkList p = L->next;
while(p){
i++;
if(p->data == e){
return i;
}
p = p->next;
}
return 0;
}
Status ListInsert(LinkList L, int i,ElemType e){
int j;
LinkList p,s;
p = L;//不要写成p = L->next,因为插入的位置可能是头结点
j = 1;
while(p && j<i){
p = p->next;
j++;
}
if( !p || j>i){
return ERROR;
}
s = (LinkList)malloc(sizeof(struct 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->next && 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;
}
Status ListTraverse(LinkList L){
LinkList p = L->next;
while(p){
visit(p->data);
p = p->next;
}
printf("\n");
return OK;
}
void CreateListHead(LinkList L,int n){
LinkList p;
int i;
srand(time(0));
for(i = 0;i<n; i++){
p = (LinkList)malloc(sizeof(struct 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));
r = L;
for(i = 0; i < n; i++){
p = (LinkList)malloc(sizeof(struct Node));
p->data = rand()%100 +1;
r->next = p;
r = p;
}
r->next = NULL;
}
int main(){
LinkList L = (LinkList)malloc(sizeof(struct Node));//头结点
ElemType e;
Status i;
int j,k;
i=InitList(L);
printf("初始化后,L是否为空:%d\n",ListEmpty(L));
CreateListTail(L,10);
ListTraverse(L);
for(j = 1; j <= 5; j++){
i = ListInsert(L,i,j);
}
ListTraverse(L);
k = ListLength(L);
printf("L.length: %d\n",k);
i = ListDelete(L,1,&e);
if(i==ERROR){
printf("删除失败\n");
} else {
printf("删除的数是 %d\n",e);
}
ListTraverse(L);
i=ClearList(L);
printf("\n清空L后:ListLength(L)=%d\n",ListLength(L));
}
如需转载,请注明文章出处,谢谢!!!
浙公网安备 33010602011771号