链表

/* ***********************************************
Author        :mubaixu
Created Time  :2015-12-08 20:45:05
File Name     :线性表顺序存储操作
************************************************ */
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <windows.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define status int
#define elemtype int
typedef struct lnode{
   elemtype date;
   struct lnode *next;
}node,*linklist;

status get_elem(linklist l,int i,elemtype &e){
    p=l->next;
    elemtype j=1;
    while(p&&j<i){//若j<n,在while循环结束后j==i,指针p指向第i个节点
       p=p->next;
       j++;
    }
    if(!p||j>i)
    return ERROR;
    e=p->date;
    return OK;
}
//插入和删除都是需要先便利值第i个位置的前一个节点
status listinsert(linklist &l,int i,elemtype e){// 在第i个位置插入元素e,其实就是在第i个元素之前插入
   p=l;
   elemtype j=0;
    while(p&&j<i-1){
       p=p->next;
       j++;
    }
   if(!p||j>i-1)
   return ERROR;
   s=(linklist)malloc(sizeof(lnode));
   s->date=e;
   s->next=p->next;
   p->next=s;
   return OK;
}
status listdelete(linklist &l,int i,elemtype &e){//删除第i个元素
    p=l;
    j=0;
    while(p->next&&j<i-1){//注意此处的p->next,因为我们删除的下个节点必须不为NULL;
       p=p->next;
       j++;
    }
    if(!p->next||j>i-1)
      return ERROR;
      q=p->next;
      e=q->date;
      p->next=q->next;
      free(p);
      return OK;
}

void creatlist(linklist &l,int n){//倒序插入值建立链表  page:30
     l=(linklist)malloc(sizeof(lnode));
     l->next=NULL;
     for(int i=n;i>0;i--){
          p=(linklist)malloc(sizeof(lnode));
          scanf("%d",&p->date);
          p->next=l->next;
          l->next=p;
     }
}
原文地址:https://www.cnblogs.com/13224ACMer/p/5031145.html