数据结构的C实现_双向循环链表
2012-03-22 18:25
513 查看
//编译环境 visual studio 2008,win32 console application. //DuLNode.c //双向循环链表 #include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR 0 typedef char elemType;//元素类型 typedef struct _DuLNode { elemType data; struct _DuLNode *prior; struct _DuLNode *Next; }DuLNode,*DuLList; //获取表长 int DuLNodeLength(DuLNode *L) { DuLNode *p=L->Next; int length=0; while((p!=NULL)&&(p!=L)) { p=p->Next; length++; } return length; } //获取第pos个位置的元素,若正确获取,返回1,否则返回0 int GetElem(DuLNode *L,int pos) { DuLNode *p=L->Next; int j=1; while((p!=L)&&j<pos) { p=p->Next; ++j; } if((p==L)||j>pos){ printf("get postion error\n");return ERROR;} printf("位置%d处的元素是: %c\n",pos,p->data); return OK; } //获取第pos个位置的元素的指针 DuLList GetElemP(DuLNode *L,int pos) { DuLNode *p=L; int j; for(j=1;j<=pos;j++) p=p->Next; return p; } //在带头结点的双向循环链表的第pos个位置前插入元素e int ListInsert(DuLNode *L,int pos,elemType e) { DuLNode *p,*s; p=GetElemP(L,pos); if(!p) return ERROR;//位置不对 if(!(s=(DuLNode *)malloc(sizeof(DuLNode)))) return ERROR; s->data=e; s->prior=p->prior; p->prior->Next=s; s->Next=p; p->prior=s; return OK; } //删除第pos个元素,并返回其值 int ListDelete(DuLNode *L,int pos) { DuLNode *p; elemType tmp; p=GetElemP(L,pos); if(!p) return ERROR; tmp=p->data; p->prior->Next=p->Next; p->Next->prior=p->prior; free(p); printf("删除第%d个位置的元素,该元素是:%c\n",pos,tmp); return OK; } //正向遍历双向循环链表 void TraverseList(DuLNode *L) { DuLNode *p=L->Next; printf("正向遍历:\n"); while(p!=L) { printf("%c ",p->data); p=p->Next; } printf("\n"); } //逆向遍历双向循环链表 void TraverseBack(DuLNode *L) { DuLNode *p=L->prior;//指向尾结点 printf("逆向遍历:\n"); while(p!=L) { printf("%c ",p->data); p=p->prior; } printf("\n"); } main() { DuLNode *L=(DuLNode *)malloc(sizeof(DuLNode)); L->Next=L->prior=L;//循环链表 ListInsert(L,1,'a'); ListInsert(L,2,'b'); ListInsert(L,3,'c'); ListInsert(L,4,'d'); printf("表长为%d\n",DuLNodeLength(L)); TraverseList(L); GetElem(L, 1); GetElem(L, 2); GetElem(L, 3); ListDelete(L,2); TraverseList(L); TraverseBack(L); }
相关文章推荐
- java与数据结构(4)---java实现双向循环链表
- 数据结构之循环双向链表java实现
- 数据结构-内核的双向循环链表-简单实现
- 数据结构双向循环链表的C语言实现(插入,查询,删除)
- 数据结构学习之双向循环链表的基本操作(非递归实现)
- 数据结构学习之链表(单向、单循环以及双向)(递归实现)
- 数据结构 P36-37 算法实现 双向循环链表的插入与删除
- C++实现数据结构三 双向循环链表
- C++类模板 实现双向循环链表的基本算法 《数据结构》(C++版 北京科海)中摘抄
- 数据结构--双向循环链表C实现
- 数据结构编程笔记六:第二章 线性表 双向循环链表的实现
- C实现通用数据结构--双向链表
- C实现通用数据结构--双向链表
- [java数据结构]--java双向链表LinkedList的简单实现
- 数据结构:双向链表实现队列与循环链表
- java双向循环链表的实现代码
- 一个简单的双向循环链表的实现
- 数据结构之线性结构--双向循环链表
- Java数据结构学习之 有序非循环双向链表的实现
- C语言实现双向循环链表