One-day-one-program(4)之链表的实现
2014-03-28 16:59
323 查看
本程序主要实现链表的创建(包括前插法和后插法)、输出、按值查找、按序号查找以及删除和插入等基本功能的实现;此链表是不带头结点的单向链表。
#include<stdio.h> #include<stdlib.h> typedef int datatype; typedef struct LNode { datatype data; struct LNode *next; }LNode,*LinkList; LinkList Creat_LinkList1()//头插法 { LNode *s; LinkList L=NULL; int x; printf("请输入要存的数值:\n"); scanf("%d",&x); while(x!=-1) { s=(LNode*)malloc(sizeof(LNode)); s->data=x; s->next=L; L=s; scanf("%d",&x); } return L; } LinkList Creat_LinkList2()//尾插法 { LinkList L=NULL; LNode *s,*r=NULL; int x; printf("请输入要存的数值:\n"); scanf("%d",&x); while(x!=-1) { s=(LNode*)malloc(sizeof(LNode)); s->data=x; s->next=NULL; if(L==NULL) L=s; else r->next=s; r=s; scanf("%d",&x); } return L; } void Print(LinkList L)//输出函数(包括求表长) { int lenth=0; LinkList p=L; while(p) { printf("%d\n",p->data); p=p->next; lenth++; } printf("链表长度为:"); printf("%d\n",lenth); } LNode *Locate_LinkList(LinkList L,datatype x)//查找函数(按值查找) { LNode *p=L; while(p!=NULL&&p->data!=x) p=p->next; return p; } int Insert_LinkList(LinkList L,datatype elm,datatype x)//插入函数 { LNode *s,*p; p=Locate_LinkList(L,elm); if(p==NULL) { printf("p是空的\n"); return 0; } else { s=(LNode*)malloc(sizeof(LNode)); s->data=x; s->next=p->next; p->next=s; return 1; } } LNode *Get_LinkList(LinkList L,int i)//按序号查找 { LNode *p=L; int j=1; while(p!=NULL&&j<i) { p=p->next; j++; } return p; } int Delete_LinkList(LinkList L,int i)//删除函数 { LinkList p,s; p=Get_LinkList(L,i-1); if(p==NULL) { printf("i-1不存在\n"); return -1; } else if(p->next==NULL) { printf("i不存在\n"); return 0; } else { s=p->next; p->next=s->next; free(s); return 1; } } void main() { LinkList p; //p=Creat_LinkList1(); p=Creat_LinkList2(); Print(p); //查找 /*int x; LNode *s; printf("请输入你要查找的数:\n"); scanf("%d",&x); s=Locate_LinkList(p,x); printf("%d",s->data);*/ //插入 /*int y; int z; int a; printf("请输入要插入的数:\n"); scanf("%d",&y); printf("请输入要插入到的位置:\n"); scanf("%d",&z); a=Insert_LinkList(p,z,y); Print(p);*/ //删除 int i; int j; printf("请输入你要删除的数的序号:\n"); scanf("%d",&i); j=Delete_LinkList(p,i); printf("删除后的链表为:\n"); Print(p); }
相关文章推荐
- One-day-one-program(7)之顺序栈的实现
- One-day-one-program(1)之顺序表的实现
- One-day-one-program(5)之冒泡排序
- 用链表实现带菜单功能的一元多项式的基本操作 (Use linked list to realize the basic operation of a one-dimensional polynom)
- One-day-one-program(6)之快速排序
- Algorithm One Day One -- 判断链表是否有环(上)
- Algorithm One Day One -- 判断链表是否有环(下)
- [one day one question] express 不缓存如何实现
- One-day-one-program(2)之1至100之间的素数的求法
- Program work 5. 用链表实现矩阵及实现矩阵转置
- a program a day 24(实现一个push pop min均为O(1)的栈)
- One-day-one-program(3)之统计字符串中不同字母的个数
- #DayOne#,分别用循环和递归的方式实现阶乘
- Algorithm One Day One -- 判断链表是否有环(上)
- One-day-one-program(8)之统计字符串中子串的个数
- Algorithm One Day One -- 判断链表是否有环(下)
- 倒插法实现链表逆置
- 链表的C语言实现之单链表的实现
- linklist 链表的实现
- Java实现-链表排序