本文共 2956 字,大约阅读时间需要 9 分钟。
#include<stdio.h>
#include<malloc.h>typedef struct Lnode{ int data; struct Lnode *next;}Lnode,*LinkList;//定义单链表void Create_LinkList(LinkList &L)
{ L=(LinkList)malloc(sizeof(Lnode)); L->next =NULL; int j=0;//记录单链表中元素个数 printf("输入链表中的五个元素:"); /* for(int i=1;i<=5;i++) { LinkList p=(LinkList)malloc(sizeof(Lnode));
p->next=L->next; L->next =p; scanf("%d",&p->data); j++;//记录单链表的长度 }//(逆序实现) */ LinkList q=L; for(int i=1;i<=5;i++) { LinkList p=(LinkList)malloc (sizeof(Lnode));
q->next=p; p->next=NULL; q=q->next ; scanf("%d",&p->data); j++;//记录单链表的长度 }//(正序实现) }//初始化单链表void Printf_LinkList(LinkList L)
{ LinkList p; p=L->next; while(p) { printf("%d ",p->data ); p=p->next; }}//输出单链表void LinkList_Empty(LinkList L)
{ if(L->next) printf("链表非空/n"); else printf("链表为空表/n");}//判断单链表是不是空表void Clear_LinkList(LinkList L)
{ L->next =NULL;}//将单链表置空void GetElem_LinkList(LinkList L,int i,int &e)
{ LinkList p=L->next; int j=1;//计数器 while(p&&j<i) { p=p->next; j++; } if(!p||j>i) printf("error/n");//第i个元素不存在 e=p->data;//取第i个元素}//取单链表中第i个元素 void Delete_LinkList(LinkList &L,int i,int &e){ LinkList p=L; int j=0;//计数器 while (p->next&&j<i-1) { p=p->next; j++; } if(!p->next||j>i-1) printf("error1/n"); LinkList q=p->next; p->next=q->next; e=q->data;//存储删除的元素 free(q);//释放删除的空间}//删除单链表中第i个元素void Insert_LinkList(LinkList &L,int i,int e)
{ LinkList p=L; int j=0; while(p&&j<i-1) { p=p->next; j++; } if(!p||j>i-1) printf("error2/n"); LinkList s=(LinkList)malloc(sizeof(Lnode)); s->data=e; s->next =p->next ; p->next =s;}//在单链表的第i个元素前插入e int Length_LinkList(LinkList L){ int j=0;//用来记录单链表中元素个数 LinkList p=L; while (p->next) { p=p->next; j++; } return j;}//求单链表中元素个数 void PriorElem(LinkList L,int cur_e,int &pre_e){ bool flag=0; LinkList p=L->next; if(!p) printf("链表为空表/n"); else { for(p=L->next;p->next;p=p->next) { if(p->next->data==cur_e) { pre_e=p->data; flag=1; } } if(flag==0) printf("无前驱/n"); } }//求前驱void NextElem(LinkList L,int cur_e,int &next_e)
{ bool flag=0; LinkList p=L->next; if(!p) printf("链表为空表1/n"); else { for(p=L->next;p->next;p=p->next) { if(p->data==cur_e) { next_e=p->next->data;
flag=1; } } if(flag==0) printf("无后继/n"); }}//求后继int Locate_LinkList(LinkList L,int e)
{ LinkList p=L->next; int j=1; while(p->data!=e&&p->next) { p=p->next; j++; } if(p->data==e) return j; else { printf("无当前元素/n"); return 0; } if(!p) { printf("无当前元素/n"); return 0; } }//定位
main(){ int a;//用a来存储单链表中的第三个元素 int b;//用b来存储删除单链表中的第三个元素 int c;//用来存储单链表长度 int d;//用来存储前驱 int f;//用来存储后继 int g;//用来存储所找元素的位置 LinkList La;//创建单链表La Create_LinkList(La);//初始化单链表 LinkList_Empty(La);//判断表是不是空表 GetElem_LinkList(La,3,a);//取单链表中第三个元素并用a存储 Delete_LinkList(La,3,b);//删除单链表中第三个元素并用b存储 Insert_LinkList(La,4,5);//在第4个元素前插入5 c=Length_LinkList(La);//求单链表长度 PriorElem(La,5,d);//求5的前驱 NextElem(La,5,f);//求5的后继 g=Locate_LinkList(La,5);//定位操作 printf("g=%d",g); printf("f=%d",f); printf("d=%d",d); printf("a=%d/n",a); printf("b=%d/n",b); Printf_LinkList(La);//输出单链表 return 0;}
转载地址:http://dcmvi.baihongyu.com/