数据结构——单向链表的链式存储及实现
2013-10-26 19:04
711 查看
#include<iostream> #include<cstdlib> #include<cstdio> using namespace std; typedef int ElemType; typedef struct Node { ElemType data; struct Node *next; }Node,*LinkList; LinkList create()//创建链表 { LinkList p,q,h; ElemType x; h=(Node *)malloc(sizeof(Node)); p=h; printf("enter x:\n"); scanf("%d",&x); while(x!=0) { q=(Node *)malloc(sizeof(Node)); q->data=x; p->next=q; p=q; scanf("%d",&x); } p->next=NULL; return h; } void list_display(LinkList h)//遍历 { LinkList p; p=h->next; while(p!=NULL) { printf("%d ",p->data); p=p->next; } cout<<endl; } int LinkListDelete(LinkList h,int i,int *e)//删除 { LinkList p,q; p=h; q=h->next; int j=1; while(q!=NULL&&j<i) { j++; p=q; q=q->next; } if(i==j&&q!=NULL) { p->next=q->next; *e=q->data; free(q); return 1; } else return 0; } int LinkListInsert(LinkList h,int i,ElemType e)//插入 { LinkList p,q; p=h; int j=0; while(j<(i-1)&&p->next!=NULL) { j++; p=p->next; } if(j==i-1&&p->next!=NULL) { q=(Node *)malloc(sizeof(Node)); if(q==NULL) return 0; q->data=e; q->next=p->next; p->next=q; return 1; } else return 0; } LinkList linklistni(LinkList h)//逆置 { LinkList p,q; if (h==NULL) { printf("链表空!\n"); return h; } p=h->next; q=p->next; p->next=NULL; while(q!=NULL) { p=q; q=p->next; p->next=h->next; h->next=p; } return h; } LinkList deleteeven(LinkList h)//删除偶数 { LinkList p,q; p=h->next; q=h->next; int i=1,t,s; while(q!=NULL) { if(q->data%2==0) { p->next=q->next; free(q); } else p=q; q=p->next; } return h; } void init() { printf("*********菜单*********\n"); printf("1.创建一个新链表\n"); printf("2.遍历链表\n"); printf("3.删除链表中的元素\n"); printf("4.插入链表中一个元素\n"); printf("5.对链表中的元素逆置\n"); printf("6.删除链表中的偶数\n"); } int main() { init(); LinkList list;int n,t,i; while(~scanf("%d",&n)) { switch(n) { case 1:list=create();break; case 2:list_display(list);break; case 3:printf("输入要删除第几个\n"); scanf("%d",&i); if(LinkListDelete(list,i,&t)) printf("删除成功\n"); else printf("删除失败\n"); break; case 4:printf("输入插入的元素的位置:"); scanf("%d",&i); printf("输入插入的元素:"); scanf("%d",&t); if(LinkListInsert(list,i,t)) { printf("插入成功,插入后结果为:\n"); list_display(list); } else printf("插入失败\n"); break; case 5:list=linklistni(list); printf("逆置结果为:\n"); list_display(list);break; case 6: list=deleteeven(list); printf("删除结果为:\n"); list_display(list); break; } } return 0; }
相关文章推荐
- 数据结构:线性表的链式存储(单向链表)--Java实现
- 数据结构复习——线性表的链式存储实现(单向链表)
- 线性表的Java实现--链式存储(单向链表)
- 数据结构_线性表_链式存储_单向循环链表的基本操作
- 线性表的Java实现--链式存储(单向链表)
- [置顶] 数据结构——队列的链式存储结构以及实现
- 数据结构学习笔记-栈的链式存储(C语言实现)
- 数据结构_线性表_链式存储_双向循环链表的基本操作
- 数据结构与算法:单向链表实现与封装(有头)
- Python实现基础数据结构--单向链表
- 2-4-单链表链式存储结构-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- 基于链式链表的栈链式存储的C风格实现
- [数据结构]程杰队列的链式存储结构及实现代码
- 2-4-单链表链式存储结构-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- 数据结构:线性表的链式存储(双向链表)--Java实现
- 数据结构Java实现【3】----单向链表的插入和删除
- 数据结构学习之堆栈的链式存储C++实现
- C++,数据结构,单向链表的实现及简单运用,运用模板
- 基本数据结构的实现——单向链表
- 数据结构学习----线性表的链式表示之升序排序的单链表(Java实现)