码迷,mamicode.com
首页 > 其他好文 > 详细

线性表基本操作实例

时间:2015-10-24 17:24:42      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:

#include<iostream.h>   //线性表的基本操作
#include <stdlib.h>
#include <stdio.h>

#define LIST_INIT_SIZE   100  //线性表存储空间的初始分配量 
#define LISTINCREMENT  10  //线性表存储空间的分配增量 

typedef struct{
    int  *elem;           //存储空间基址 
    int  length;       //当前长度  
    int listsize;         //当前分配的存储容量(以sizeof(ElemType)为单位)
}SqList;

int InitList_Sq(SqList &L) {     // 构造一个空的线性表L。 
    L.elem = new int[LIST_INIT_SIZE];
    if (!L.elem) exit(1);     // 存储分配失败 
    L.length = 0;                  // 空表长度为0
    L.listsize = LIST_INIT_SIZE;   // 初始存储容量 
    return 0; 
} //InitList_Sq

int ListInsert_Sq(SqList&L, int i, int e) {      
    if (i < 1 || i > L.length+1) return 1;  // i值不合法    
    if (L.length>= L.listsize) {   // 当前存储空间已满,增加容量
    int* newbase = (int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof (int)); 
        if (!newbase)  exit(1);  
        L.elem = newbase;             // 新基址
        L.listsize += LISTINCREMENT;  // 增加存储容量   
    }
    int* q = &(L.elem[i-1]);   // q为插入位置 
    for (int*p = &(L.elem[L.length-1]); p>=q; --p) *(p+1) = *p;          // 插入位置及之后的元素右移 
    *q = e;       // 插入
    ++L.length;   // 表长增1 
    return 0; 
}

int ListDelete_Sq(SqList&L, int i, int&e) {     // 在顺序线性表L中删除第i个元素,并用e返回其值。   // i的合法值为1≤i≤ListLength_Sq(L)。 
    int *p, *q;    
    if (i<1 || i>L.length) return 1;  // i值不合法    
    p = &(L.elem[i-1]);                   // p为被删除元素的位置   
    e = *p;                               // 被删除元素的值赋给e   
    q = L.elem+L.length-1;                // 表尾元素的位置    
    for (++p; p<=q; ++p) *(p-1) = *p;     // 被删除元素之后的元素左移   
    --L.length;                           // 表长减1 
    return 0; 
} 

void Traverse(SqList L){    //逐个输出顺序线性表L的元素。
    cout<<"La:";
    for(int i=0;i<L.length;i++)  
        cout<<L.elem[i]<<"  ";
}

void main(){
    SqList La;
    InitList_Sq(La);       //构造线性表La
    int a[6] = {1,4,8,3,2,0};
for(int i=1;i<7;i++){
        ListInsert_Sq(La,i,a[i-1]);   //插入元素
    }
    Traverse(La);    //逐个输出顺序线性表L的元素。
    cout<<endl;
    int m;
    ListDelete_Sq(La, 3, m);  //删除元素
    cout<<"删除元素后";
    Traverse(La);
    cout<<"     删除的元素为:"<<m<<endl;  //输出
}
  技术分享

 

线性表基本操作实例

标签:

原文地址:http://www.cnblogs.com/123lele/p/4907101.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!