单链表的创建与使用

来源:互联网 发布:js设置style的left 编辑:程序博客网 时间:2024/06/06 20:31
/*作 者:清风小陈   完成日期: 2017 年 03 月 23 日   */  #include<stdio.h>#include<stdlib.h> #define OK 1  #define Error 0  #define TRUE 1 #define FALSE 0typedef int Status;typedef int ElemType;typedef struct LNode{int data;struct LNode*next;}LNode,*LinkList;//定义结构类型和变量Status Init(LinkList&L){L=new LNode;L->next=NULL;return OK;}//初始化链表 Status ListEmpty(LinkList &L) {    if(L->next)     return FALSE;   else     return TRUE; }//判断表是否为空Status ListInsert(LinkList &L, int i, ElemType e)  {   int j=0;   LinkList p=L; LinkList s;   while(p&&j<i-1)   {     p=p->next;     j++;   }   if(!p||j>i-1)      return Error;   s=(LinkList)malloc(sizeof(struct LNode));    s->data=e;   s->next=p->next;   p->next=s;   return OK; }//插入算法Status ListDelete(LinkList &L,int i,ElemType &e) {    int j=0;   LinkList p=L,q;   while(p->next&&j<i-1)   {     p=p->next;     j++;   }   if(!p->next||j>i-1)    {printf("wz--Error\n");return Error;}   q=p->next;   p->next=q->next;   e=q->data;   free(q);   return OK; }//删除算法Status GetElem(LinkList L,int i,ElemType &e){LinkList p;p=L->next; int j=1;while(p&&j<i){p=p->next;++j;}if(!p||j>i)  return Error;e=p->data;return OK;}//按位序取值Status DestroyList(LinkList &L) {    LinkList q;   while(L)   {     q=L->next;     free(L);     L=q;   }   return OK; }//销毁单链表LStatus ClearList(LinkList &L)  {    LinkList p,q;   p=L->next;    while(p)    {     q=p->next;     free(p);     p=q;   }   L->next=NULL;   return OK; }//将L重置为空表 int ListLength(LinkList &L) {    int i=0;   LinkList p=L->next;    while(p)   {     i++;     p=p->next;   }   return i; }//返回L中数据元素个数 Status output(LinkList L){if(L==0){printf("Error\n");return Error;}LinkList p=L->next;while(p){printf("%d  ",p->data);p=p->next;}printf("\n");return OK;}//输出单链表main(){int i,k,z,c;LinkList L;Init(L);  //初始化单链表ListInsert(L,1,1);for(i=2;i<=10;i++)ListInsert(L,i,i);printf("你创建的链表为:");output(L);printf("\n");ListInsert(L,11,100);  printf("当前链表为:");output(L);  //执行增值操作后的单链表printf("\n");ListDelete(L,1,k);printf("你删除的值为:%d\n\n",k);printf("当前链表为:");output(L);  //执行删除操作后的单链表printf("\n");GetElem(L,1,z);  //取值printf("你要取的值为:%d\n\n",z);c=ListLength(L);printf("当前链表元素个数:%d\n\n",c);ClearList(L);  //将L重置为空表DestroyList(L);  //销毁单链表L}

0 0
原创粉丝点击