第2章线性表

来源:互联网 发布:cydia impactor软件源 编辑:程序博客网 时间:2024/05/10 23:10

线性结构特点:在数据元素非空有限集合中,(1)存在唯一的一个被称为“第一个”的数据元素;(2)存在唯一的一个被称为“最后一个”的数据元素;(3)除了第一个之外,集合中每个数据元素均只有一个前驱;(4)除了最后一个之外,集合中每个数据元素均只有一个后继;

线性表的顺序表示和实现:

#include<stdio.h>#include<malloc.h>#define longth 100#define increace 10typedef struct{    int *elem;    int length;    int listsize;}SqList;int InitList(SqList &L){//建立顺序表  L.elem=(int *)malloc(longth*sizeof(int));  if(!L.elem)  exit(0);  L.length=0;  L.listsize=longth;  return 1;}int ListInsert(SqList &L,int i,int e){//插入数据    if(i<1||i>L.length+1)return 1;    if(L.length>=L.listsize)    {       int *newbase=(int *)realloc(L.elem,(L.listsize+increace)*sizeof(int));        if(!newbase)exit(5);        L.elem=newbase;        L.listsize+=increace;    }    int *q=&(L.elem[i-1]);  for(int *p=&(L.elem[L.length-1]);p>=q;--p)  *(p+1)=*p;  *q=e;  ++L.length;  return 2;}int ListDelete_Sq(SqList &L ,int i){    int e;   if((i<1)||(i>L.length))       return errno;   int * p=&(L.elem[i-1]);    e=*p;    int * q=L.elem+L.length-1;    for(++p;p<=q;++p)        *(p-1)=*p;    --L.length;    return e;}void show(SqList &l){    for(int p=0;p<l.length;++p)    printf("%d ",l.elem[p]);}int main(){    int temp,element;    SqList a;    InitList(a);    printf("输入五个数:\n");    for(int i=1;i<=5;++i)    {        int t;        scanf("%d",&t);        ListInsert(a,i,t);    }    printf("你输入了:\n");    show(a);    printf("\n输入你要删除的位置:");    scanf("%d",&temp);    element=ListDelete_Sq(a,temp);    printf("你删除了%d\n",element);    show(a);    getchar();}


0 0