One-day-one-program(4)之链表的实现

来源:互联网 发布:java web项目实例大全 编辑:程序博客网 时间:2024/04/30 13:03

    本程序主要实现链表的创建(包括前插法和后插法)、输出、按值查找、按序号查找以及删除和插入等基本功能的实现;此链表是不带头结点的单向链表。

 

#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;elser->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);}


 

0 0
原创粉丝点击