#include <iostream> #include <cstdlib> using namespace std; #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef int ElemType; typedef struct LNode { ElemType data; struct LNode *next; }LNode, *LinkList; void InitList(LinkList &L) { L = (LinkList)malloc(sizeof(LNode)); if(!L) exit(OVERFLOW); L->next = NULL; } void DestroyList(LinkList &L) { LinkList q; while(L) { q = L->next; free(L); L = q; } } void ClearList(LinkList L) { LinkList p,q; p = L->next; while(p) { q = p->next; free(p); p = q; } L->next = NULL; } bool ListEmpty(LinkList L) { if(L->next) return false; else return true; } int ListLength(LinkList L) { int i = 0; LinkList p = L->next; while(p) { i++; p = p->next; } return i; } Status GetElem(LinkList L,int i,ElemType &e) { int j = 1; LinkList p = L->next; while(p && j < i) { p = p->next; j++; } if(!p || j > i) return ERROR; e = p->data; return OK; } int LocateElem(LinkList L,ElemType e) { int i = 0; LinkList p = L->next; while(p) { i++; if(p->data == e) return i; p = p->next; } return 0; } Status PriorElem(LinkList L, ElemType cur_e, ElemType &pre_e) { LinkList q, p = L->next; while(p->next) { q = p->next; if(q->data == cur_e) { pre_e = p->data; return OK; } p = q; } return INFEASIBLE; } Status NextElem(LinkList L,ElemType cur_e,ElemType &next_e) { LinkList p = L->next; while(p->next) { if(p->data == cur_e) { next_e = p->next->data; return OK; } p = p->next; } return INFEASIBLE; } Status ListInsert(LinkList L,int i,ElemType e) { int j = 0; LinkList p = L,s; while(p && j < i - 1) { p = p->next; j++; } if(!p || j > i - 1) return ERROR; s = (LinkList)malloc(sizeof(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) return ERROR; q = p->next; p->next = q->next; e = q->data; free(q); return OK; } void ListTraverse(LinkList L) { LinkList p = L->next; while(p) { cout<<p->data<<" "; p = p->next; } cout<<endl; } int main() { LinkList L; InitList(L); cout<<ListLength(L)<<endl; for(int i = 1; i <= 10; i++) ListInsert(L,i,i); ListTraverse(L); return 0; }