数据结构 链表的实现(C语言)
2016-09-29 17:08
603 查看
#include <stdio.h> #include <stdlib.h> #include <malloc.h> /* 单链表 */ /* run this program using the console pauser or add your own getch, system("pause") or input loop */ typedef struct LNode{ int data; //数据域 struct LNode * next; //指针域 }LNode,*LinkList; //创建(后插法) LinkList create(){ int i; int len; int val; LinkList list = (LinkList)malloc(sizeof(LNode)); if(list==NULL){ printf("内存分配失败\n"); exit(-1); } list->next = NULL; printf("长度为:"); scanf("%d",&len); printf("\n"); LinkList r = list; for(i=0;i<len;i++){ LinkList p = (LinkList)malloc(sizeof(LNode)); printf("数据为:"); scanf("%d",&val); p->data = val; p->next = NULL; r->next = p; r = p; } return list; } //遍历 void traverse(LinkList list){ while(list->next!=NULL){ printf("%d ",list->next->data); list = list->next; } } //取值 int getEle(LinkList list,int i ){ LinkList p = list; //p指向头结点 int j = 0; if(i<0||p->next == NULL){ printf("i不合法或链表为空"); exit(-1); } while(p->next&&j<i){ p = p->next; ++j; } int e = p->data; return e; } //插入 void insert(LinkList list,int i,int val){ LinkList p = list; int j = 0; while(p->next&&j<i-1){ p = p->next; ++j; } if(!p->next||j>i-1){ printf("i不合法\n"); } LinkList s = (LinkList)malloc(sizeof(LNode)); s->data = val; s->next = p->next; p->next = s; } //删除 void deleteEle(LinkList list,int i){ LinkList p = list; int j =0; while(p->next&&j<i-1){ p = p->next; ++j; } if(!p->next||j>i-1){ printf("i不合法"); } LinkList s = p->next; p->next = s->next; free(s); } //按值查找序号(地址) void LocateElem(LinkList list,int ele){ LinkList p = list; while(p->next!=NULL){ p = p->next; if(ele == p->data){ printf("%p",p); } } } //计算长度 int getLength(LinkList list){ LinkList p = list->next; int j = 0; while(p!=NULL){ ++j; p = p->next; } return j; } int main(int argc, char *argv[]) { LinkList list = NULL; list = create(list); //insert(list,1,222); //deleteEle(list,2); traverse(list); //int e = getEle(list,3); //LocateElem(list,3); //int len = getLength(list); //printf("length = %d",len); return 0; }
相关文章推荐
- 线性表的实现
- nginx数据结构(ngx_str_t)
- ha,hb为带头结点的非递减有序单链表,利用原空间生成的非递减有序单链表
- 这是顺序表的操作1.删除最小元素,空元素由最后一个填补,删除给定x的所有元素删除s-t间的所有元素
- 数据结构-单链表的操作
- 数据结构 单链表简单实现
- HDU 3911 线段树区间合并+异或操作
- 数据结构:循环队列(C语言实现)
- 线性表之顺序表
- 数据结构实验之链表六:有序链表的建立
- 数据结构实验之链表六:有序链表的建立
- 数据结构实验之链表六:有序链表的建立
- 数据结构实验之链表六:有序链表的建立
- 数据结构与算法(一),概述
- 数据结构实验之链表五:单链表的拆分
- 数据结构实验之链表五:单链表的拆分
- 数据结构实验之链表五:单链表的拆分
- 数据结构实验之链表五:单链表的拆分
- 关于数据结构教程P67例3.4的算法的一点优化
- 数据结构之线性表