无头结点链表实现线性表
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.
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"); }
相关文章推荐
- C++实现无头结点的双向链表
- C语言实现,无头结点不带环的单向链表的基本操作
- 无头结点的单链表(java实现)
- 在无头结点的动态单链表上实现线性表操作Insert(L,i,b)
- c实现无头结点单链表
- 无头结点无环的单链表实现
- 单链表的头插法和尾插法实现代码(无头结点)
- 试编写在无头结点的单链表上实现线性表的插入操作的算法,并和带头结点的单链表上的插入操作的算法进行比较
- 在无头结点的动态单链表上实现线性表操作Delete(L,i)
- 单链表实现(C语言版,无头结点)
- 实现无头结点单链表的基本操作函数
- 数据结构与算法分析笔记与总结(java实现)--链表2:倒数第k个结点问题(k从1开始)
- 计算带头结点单链表的长度 计算单链表的长度,实现单链表的打印
- 【C++数据结构学习笔记---线性表】用单链表实现线性表
- 编写算法实现建立一个带头结点的含n个元素的双向循环链表H,并在链表H中的第i个位置插入一个元素e
- 数据结构编程笔记四:第二章 线性表 单链表的实现
- Java实现链表之结点
- 编程之美—面试题15 链表中倒数第K个结点(java实现)
- 试分别以顺序表和单链表作存储结构,各写一实现线性表就地逆置的算法
- 线性表—使用链表实现