顺序表的前驱与后继

来源:互联网 发布:淘宝怎么注册新账号 编辑:程序博客网 时间:2024/04/27 18:02
#include<stdio.h>#include<stdlib.h>#include<malloc.h>#define LIST_INIT_SIZE  100#define LISTINCREMENT  10#define OK 1#define ERROR 0#define OVERFLOW -2typedef int Status; typedef int ElemType;typedef struct {ElemType *elem;int length;int listsize;}SqList;Status InitList_Sq(SqList &L){L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));//首地址if(!L.elem)exit(OVERFLOW);L.length=0;L.listsize=LIST_INIT_SIZE;return OK;}int ListLength(SqList L) { // 初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数   return L.length; }                int GetElem(SqList &L,int i,ElemType &e){if(i>L.length||i<1)exit(OVERFLOW);e=L.elem[i-1];return OK;} int PriorElem(SqList &L,int i,ElemType &e){int j;for(j=1;j<L.length;j++){if(i==L.elem[j-1])e=L.elem[j-2];}return OK;} int NextElem(SqList &L,int i,ElemType &e){ int j; for(j=1;j<L.length;j++) {if(i==L.elem[j-1])e=L.elem[j]; } return OK; }Status ListInsert_Sq(SqList &L,int i,ElemType e){ElemType *newbase,*p,*q;if(i>L.length+1||i<1)return ERROR;if(L.length>=L.listsize){newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));if(!newbase)exit(OVERFLOW);L.elem=newbase;L.listsize+=LISTINCREMENT;}   //q=L.elem+i-1; //插入位置  等价于  q=&(L.elem [i-1]);for(p=L.elem+L.length-1;p>=q;--p)*(p+1)=*p;*q=e;++L.length;return OK;}Status ListDelect_Sq(SqList &L,int i,ElemType &e){ElemType *p,*q;if(i<1||i>L.length)return ERROR;p=L.elem+i-1; e=*p;    q=L.elem+L.length-1;for(++p;p<=q;++p){*(p-1)=*p;}L.length--;return OK;}void ListPrint(SqList L)//线性表输出{ElemType *p;printf("线性表中的元素为:\n");for(p=L.elem;p<L.elem+L.length;p++){ printf("%d",*p);}}void main(){SqList L;int i,j;ElemType e;InitList_Sq(L);printf("input five data \n");for(i=1;i<=5;i++){scanf("%d",&e);ListInsert_Sq(L,i,e);}ListPrint(L);/*printf("输入一个数");scanf("%d",&j);PriorElem(L,j,e);printf("%d",e);*/printf("输入一个数");scanf("%d",&j);NextElem(L,j,e);printf("%d",e);}

原创粉丝点击