单链表的C语言实现
2016-07-06 22:59
363 查看
//单链表的C语言实现 #include <stdio.h> #include <stdlib.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ typedef int DATATYPE; //链表结点的数据结构定义 typedef struct node{ DATATYPE data; struct node *next; }LinkList; //创建单链表,带头结点 LinkList *LinkList_Create(){ LinkList *head=(LinkList*)malloc(sizeof(LinkList)); if(head==NULL){ printf("创建失败!"); return NULL; } else printf("创建成功!\n"); head->next=NULL; head->data=0; return head; } //单链表测长度 ,包含头结点 int LinkList_Length(LinkList *list){ int length=0; LinkList *p; p=list; while(p!=NULL){ p=p->next; length++; } printf("The length of list is : %d\n",length); return length; } //头插法 ,插入num个数据 LinkList *Insert_head(LinkList *list,int num){ LinkList *p,*pnew; int data; p=list; if(p==NULL){ printf("list为空,不合法!"); return NULL; } while(num--){ printf("please input the data: "); scanf("%d",&data); pnew=(LinkList*)malloc(sizeof(LinkList)); pnew->data=data; pnew->next=p->next; p->next=pnew; } return list; } //尾插法 ,插入num个数据 LinkList *Insert_Tail(LinkList *list,int num){ LinkList *p,*pnew; int data; p=list; if(p==NULL){ printf("list为空,不合法!"); return NULL; } else { while(p->next!=NULL) p=p->next; while(num--){ pnew=(LinkList*)malloc(sizeof(LinkList)); printf("please input the data: "); scanf("%d",&data); pnew->data=data; pnew->next=NULL; p->next=pnew; p=pnew; } } return list; } //往链表中指定位置插入指定数据 ,规定表头为位置0 LinkList *insert(LinkList *list,int location,int data){ LinkList *p,*t; p=list; int i; t=(LinkList*)malloc(sizeof(LinkList)); while(p!=NULL){ for(i=0;i<location-1;i++){ p=p->next; } t->next=p->next; t->data=data; p->next=t; return list; } } //删除链表中指定位置的结点 LinkList *LinkList_Delete(LinkList *list,int location){ LinkList *p,*t; int i; p=list; if(p!=NULL){ for(i=0;i<location-1;i++){ p=p->next; } t=p->next; p->next=t->next; free(t); t=NULL; } return list; } //打印链表 void Link_Printf(LinkList *list){ LinkList *p; p=list; printf("The data of the list is : "); while(p!=NULL){ printf("%d ",p->data); p=p->next; } printf("\n"); } //删除链表中结点数据为data的第一个结点 LinkList *delete(LinkList *list,DATATYPE data){ LinkList *p,*t; p=list; while(p->next!=NULL){ if(p->next->data==data){ t=p->next; p->next=t->next; free(t); } else p=p->next; } return list; } //将链表翻转 ,利用头插法 LinkList *reverse(LinkList *list){ LinkList *p1,*p2,*p3; p1=list; p2=list->next;//原链表的当前处理结点 list->next=NULL;//设置单链表初始为空 while(p2!=NULL){ p3=p2->next; p2->next=list->next; list->next=p2; p2=p3; } return list; } int main(int argc, char *argv[]) { int length; LinkList *list = LinkList_Create(); length=LinkList_Length(list); list=Insert_head(list,5); list=Insert_Tail(list,5); list=insert(list,6,0); list=LinkList_Delete(list,6); Link_Printf(list); list=reverse(list); Link_Printf(list); }
相关文章推荐
- [C/C++]反转链表
- C#实现基于链表的内存记事本实例
- C#模拟链表数据结构的实例解析
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- C++利用静态成员或类模板构建链表的方法讲解
- C++实现简单的学生管理系统
- Linux内核链表实现过程
- C++链表倒序实现方法
- C#通过链表实现队列的方法
- Node.js环境下JavaScript实现单链表与双链表结构
- C#实现的简单链表类实例
- 找出链表倒数第n个节点元素的二个方法
- Java数据结构之简单链表的定义与实现方法示例
- Java模拟有序链表数据结构的示例
- C语言单循环链表的表示与实现实例详解
- C++实现的链表类实例
- PHP小教程之实现链表
- PHP中模拟链表和链表的基本操作示例
- C语言双向链表的表示与实现实例详解
- js链表操作(实例讲解)