您的位置:首页 > 其它

无头结点链表实现线性表

2012-03-24 22:52 471 查看
[web@localhost d2]$ gcc --version

gcc (GCC) 4.4.4 20100726 (Red Hat 4.4.4-13)

Copyright (C) 2010 Free Software Foundation, Inc.

#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>

struct node{
int value;
struct node *next;
};

typedef struct node LNode;
typedef struct node *SeqList;

void SeqListInit(SeqList *L){
*L=NULL;
}

int SeqListLength(SeqList L){
int l;
l=0;
//SeqList *t;
//t=&L;
while(L!=NULL){
l++;
L=L->next;
}
//L=*t;
return l;
}
int SeqListGet(SeqList L,int i){
int l;
l=SeqListLength(L);
if(l==0 || i>l) return -1;
int h;
h=1;
while(h!=i){
L=L->next;
h++;
}
return L->value;
}
int SeqListLocate(SeqList L,int i){
int l;
l=SeqListLength(L);
if(l==0) return -1;
int h=1;
while(L!=NULL){
if(L->value==i) return h;
L=L->next;
h++;
}
return -1;
}
int SeqListPrior(SeqList L,int i){
int l;
l=SeqListLocate(L,i);
if(l>1){
return SeqListGet(L,l-1);
}else{
return -1;
}
}
int SeqListNrior(SeqList L,int i){
int l,r;
l=SeqListLocate(L,i);
r=(l>1 && l<SeqListLength(L))?SeqListGet(L,l+1):-1;
return r;
}
void SeqListInsert(SeqList *L,int i,int j){
LNode *n;
printf("in%X\n",*L);
SeqList lt;
lt=&(**L);
printf("in%X\n",&(**L));
printf("in%X\n",lt);
printf("in%X\n",*L);
n = (LNode*)malloc(sizeof(LNode));
if(n==NULL) exit(0);
n -> value = i;
n -> next  = NULL;
if(*L==NULL){
*L=n;
}else{
int l;
l=SeqListLength(*L);
if(j>l){
printf("%d>%d\n",j,l);

while((**L).next!=NULL){
printf("1");
*L=(**L).next;
}
(**L).next=n;
*L=lt;

}else if(j>0 && j<=l){
printf("%d<=%d\n",j,l);
int h=1;
if(j==1){
n->next=lt;
*L=n;
}else if(j>0 && j!=1){
while(h<j-1){
*L=(**L).next;
h++;
}
n->next=(**L).next;
(**L).next=n;
*L=lt;
}
}
}
printf("in%X\n",lt);
printf("out%X\n",*L);
}
void SeqListDel(SeqList *L,int i){
int l=SeqListLength(*L);
SeqList lt;
lt=&(**L);
if(i>0 && l>0 && i<=l){
int h;
if(i==1){
LNode *t;
t=lt;
*L=(**L).next;
free(t);
}else{
for(h=1;h<i;h++){
*L=(**L).next;
}
LNode *t;
t=(**L).next;
(**L).next=t->next;
*L=lt;
free(t);
}
}
}
bool SeqListIsEmpty(SeqList L){
bool r;
r=(L==NULL)?true:false;
return r;
}
void SeqEmpty(SeqList *L){
*L=NULL;
}
void SeqListTraverse(SeqList L){
while(L!=NULL){
printf("addr[%X]value[%d]->",&L,L->value);
L=L->next;
}
}
void main(){
SeqList L,h;
printf("init:");
SeqListInit(&L);
printf("L\n");
printf("length:%d\n",SeqListLength(L));
printf("add iterm 1\n");
SeqListInsert(&L,1,1);
printf("length:%d\n",SeqListLength(L));
SeqListTraverse(L);
printf("\n");
printf("add iterm 2\n");
SeqListInsert(&L,2,2);
printf("length:%d\n",SeqListLength(L));
SeqListTraverse(L);
printf("\n");
printf("add iterm 3\n");
SeqListInsert(&L,3,3);
printf("length:%d\n",SeqListLength(L));
SeqListTraverse(L);
printf("\n");
printf("add iterm 4\n");
SeqListInsert(&L,4,4);
printf("length:%d\n",SeqListLength(L));
SeqListTraverse(L);
SeqListInsert(&L,5,1);
printf("\n");
SeqListTraverse(L);
printf("\n");
SeqListInsert(&L,6,2);
printf("\n");
SeqListTraverse(L);
printf("\n");
SeqListInsert(&L,8,8);
printf("\n");
SeqListTraverse(L);
printf("\n");
printf("the last value of 3 is %d\n",SeqListPrior(L,3));
printf("the last value of 5 is %d\n",SeqListPrior(L,5));
printf("the next value of 2 is %d\n",SeqListNrior(L,2));
printf("the next value of 4 is %d\n",SeqListNrior(L,4));
printf("is L empty ?%d\n",SeqListIsEmpty(L));
SeqListTraverse(L);
printf("\n");
SeqListDel(&L,1);
printf("is L empty ?%d\n",SeqListIsEmpty(L));
SeqListTraverse(L);
printf("\n");
SeqListDel(&L,1);
printf("is L empty ?%d\n",SeqListIsEmpty(L));
SeqListTraverse(L);
printf("\n");
SeqListDel(&L,1);
printf("is L empty ?%d\n",SeqListIsEmpty(L));
SeqListTraverse(L);
printf("\n");
SeqListDel(&L,1);
printf("is L empty ?%d\n",SeqListIsEmpty(L));
SeqListTraverse(L);
printf("\n");
SeqListDel(&L,1);
printf("is L empty ?%d\n",SeqListIsEmpty(L));
SeqListTraverse(L);
printf("\n");
SeqListDel(&L,1);
printf("is L empty ?%d\n",SeqListIsEmpty(L));
SeqListTraverse(L);
printf("\n");
SeqListDel(&L,1);
printf("is L empty ?%d\n",SeqListIsEmpty(L));
SeqListTraverse(L);
printf("\n");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: