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