当前位置 : 主页 > 编程语言 > c语言 >

线性表的基础操作(C语言版)

来源:互联网 收集:自由互联 发布时间:2023-09-06
线序表的基本操作 实验内容: 1.编写线性表基本操作函数: (1)InitList(LIST L,int ms),初始化线性表; (2) InsertList(LIST L,int item,int rc):向线性表指定位置插入元素; (3)DeleteList1(LISTL,intitem):删


线序表的基本操作

实验内容:
1.编写线性表基本操作函数:
(1)InitList(LIST L,int ms),初始化线性表;
(2) InsertList(LIST L,int item,int rc):向线性表指定位置插入元素;
(3)DeleteList1(LISTL,intitem):删除指定元素值的线性表记录;
(4)DeleteList2(LIST
L,intrc):删除指定位置的线性表记录;
(5)FindList(LIST *L,int item):查找线性表中的元素;
(6)OutputList(LIST *L):输出线性表元素;
2.调用上述函数实现下列操作,操作步骤如下:
(1)初始化线性表;
(2)调用插入函数建立一个线性表;
(3)在线性表中寻找指定的元素;
(4)在线性表中删除指定值的元素;
(5)在线性表中删除指定位置的元素;
(6)遍历并输出线性表。
注:每完成一个步骤,必须及时输出线性表元素,便于观察结果。

源代码:

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
struct LinearList           /*定义线性表结构*/
{
    int *list;          /* 存线性表元素 */
    int size;           /* 存线性表长度 */
    int MaxSize;        /* 存list数组元素个数 */
};
typedef struct LinearList LIST;
void InitList( LIST *L, int ms )    /* 初始化线性表 */
{
    if( (L->list =        (int *) malloc( ms * sizeof(int) )               ) == NULL ) {
        printf( "内存申请错误!\n" );
        exit( 1 );
    }
       L->size = 0;         
    L->MaxSize = ms;
}

int InsertList( LIST *L, int item, int rc ) 
/* item:记录值  rc:插入位置  */
{
        int i;
    if(       L->size >= L->MaxSize           ) /* 线性表已满 */
        return -1;
    if( rc < 0 )                /* 插入位置为 0 */
        rc = 0;
    if(        rc > L->size        )
        rc = L->size;
    for( i = L->size - 1; i >= rc; i-- )    /* 将线性表元素后移 */
                L->list[i+1] = L->list[i];         
    L->list[rc] = item;
    L->size ++;
    return 0; 
}

void OutputList( LIST *L )      /* 输出线性表元素 */
{
    int i;
    for( i = 0;      i < L->size;               i++ )
        printf( "%d ", L->list[i] );
        printf( "\n" );
}

int FindList( LIST *L, int item )       /* 返回 >=0 为元素位置 ?1 没找到 */
{
    int i;
    for( i = 0; i < L->size; i++ )
        if(     item == L->list[i]       )  /* 找到相同的元素,返回位置 */
            return i;
    return -1;              /* 没找到 */
}

int DeleteList1( LIST *L, int item )    
/* 删除指定元素值的线性表记录,返回>=0:删除成功 */
{
    int i, n;
    for( i = 0; i < L->size; i++ )
        if( item == L->list[i] )    /* 找到相同的元素 */
            break;
    if( i < L->size ) {
        for( n = i; n < L->size - 1; n++ )
            L->list[n] = L->list[n+1];
        L->size --;
        return i;
    }
        return -1;
}

int DeleteList2( LIST *L, int rc )  /* 删除指定位置的线性表记录,返回0:删除成功 */
{
    int i, n;
    if( rc < 0 || rc >= L->size )/* 记录位置不在线性表范围内,返回错误 */
            return -1;
    for( n = rc; n < L->size - 1; n++ )
        L->list[n] = L->list[n+1];
    L->size --;
    return 0;
}

void main()
{
    LIST LL;
        int i, r;
    printf( "list addr=%p\tsize=%d\tMaxSize=%d\n", LL.list, LL.size, LL.MaxSize );
    InitList( &LL, 100 );
    printf( "list addr=%p\tsize=%d\tMaxSize=%d\n", LL.list, LL.size, LL.MaxSize );
    while( 1 )
    {
        printf( "请输入元素值,输入0结束插入操作:" );
        fflush( stdin );    /* 清空标准输入缓冲区 */
        scanf( "%d", &i );
        if(       i == 0           )
                    break;
        printf( "请输入插入位置:" );
        scanf( "%d", &r );
        InsertList(        &LL, i, r-1           );
        printf( "线性表为:  " );
               OutputList( &LL );           
    }
    while( 1 )
    {
        printf( "请输入查找元素值,输入0结束查找操作:" );
        fflush( stdin );    /* 清空标准输入缓冲区 */
        scanf( "%d", &i );
        if( i == 0 )
                    break;
        r =    r = FindList( &LL, i );        
                if( r < 0 )
            printf( "没找到\n" );
        else
            printf( "有符合条件的元素,位置为:%d\n", r+1 );
    }
    while( 1 )
    {
        printf( "请输入删除元素值,输入0结束查找操作:" );
        fflush( stdin );    /* 清空标准输入缓冲区 */
        scanf( "%d", &i );
        if( i == 0 )
                    break;
        r =      r = DeleteList1( &LL, i );      
                if( r < 0 )
            printf( "没找到\n" );
        else {                      
            printf( "有符合条件的元素,位置为:%d\n线性表为:", r+1 );
            OutputList( &LL );
                }
    }
    while( 1 )
    {
        printf( "请输入删除元素位置,输入0结束查找操作:" );
        fflush( stdin );    /* 清空标准输入缓冲区 */
        scanf( "%d", &r );
        if( r == 0 )
                    break;
        i =    i = DeleteList2( &LL, r-1 );        
           if( i < 0 )
            printf( "位置越界\n" );
        else {                      
            printf( "线性表为:" );
            OutputList( &LL );
                }
    }
}

运行结果:

线性表的基础操作(C语言版)_c语言

题型来源:清华大学出版社 数据结构第五版(C语言版) 邓文华主编

上一篇:C语言的switch语句
下一篇:没有了
网友评论