/* ***********************************************
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;
}
}