双向链表的创建查找与删除元素
2016-05-14 23:46
288 查看
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。
#include <stdio.h> #include <stdlib.h> #define ERROR printf("ERROR"); #define MAXSIZE 20 #define YES "yes" typedef struct student { char name[MAXSIZE]; struct student *Prior,*Next; }Node,*LinkList; struct student *CreatList(int n){ int i; LinkList p1,p2,head; head = (LinkList)malloc(sizeof(Node)); head->name[0] = '0'; head->Prior = NULL; head->Next = NULL; p2 = head; printf("Please input the intenger array:\n"); for(i=0;i<n;i++){ p1 = (LinkList)malloc(sizeof(Node)); scanf("%s",p1->name); p2->Next = p1; p1->Prior = p2; p1->Next = NULL; p2 = p1; } p1->Next = NULL; return head; } //查找元素 Node *search(LinkList h,char* E) { LinkList p; p = h->Next; while(p){ if(!(strcmp(p->name,E))) return p; else p = p->Next; }ERROR return 0; } void ElementDelete(LinkList pt) { /*方法1: LinkList qt; qt = pt->Prior; pt = qt->Next; qt->Next = pt->Next; free(pt);*/ //方法2: pt->Next->Prior = pt->Prior; pt->Prior->Next = pt->Next; free(pt); } int main(int argc, char *argv[]) { int n,name; char FindName[MAXSIZE],st[3]; LinkList p,q,head; printf("Please input the chain length:\n"); scanf("%d",&n); head = CreatList(n); p = head->Next; printf("Now the chain is:\n"); while(p){ printf("%s\t",p->name); p = p->Next; } printf("\n"); printf("Please enter the name you want to find:\n"); scanf("%s",FindName); q = search(head,FindName); if(q){ printf("已找到:%s\nAre you sure to delete it?('yes'or'no'):\n",q->name); } scanf("%s",st); if(!(strcmp(YES,st))){ ElementDelete(q); p = head->Next; printf("Now the chain is:\n"); while(p){ printf("%s\t",p->name); p = p->Next; } } else printf("Exited"); getch(); return 0; }
相关文章推荐
- [C/C++]反转链表
- C#实现基于链表的内存记事本实例
- C#模拟链表数据结构的实例解析
- 详解C#读取Appconfig中自定义的节点
- Erlang分布式节点中的注册进程使用实例
- Android开发之activiti节点跳转
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- C++利用静态成员或类模板构建链表的方法讲解
- C++实现简单的学生管理系统
- PHP遍历XML文档所有节点的方法
- ztree获取选中节点时不能进入可视区域出现BUG如何解决
- 在javascript中关于节点内容加强
- 用JavaScript实现用一个DIV来包装文本元素节点
- JavaScript实现获取某个元素相邻兄弟节点的prev与next方法
- ztree获取当前选中节点子节点id集合的方法
- jquery实现删除一个元素后面的所有元素功能
- JQuery节点元素属性操作方法
- JQuery中节点遍历方法实例
- Linux内核链表实现过程
- C++链表倒序实现方法