顺序表的简单实现

本文介绍了一种线性表的链式存储方法,包括初始化、插入、遍历、更新和删除等操作,并提供了详细的C语言实现代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

测试通过!

/*
 * 线性表的链式存贮
 
*/


#include 
"stdafx.h"
#include 
<stdio.h>
#include 
<stdlib.h>

#define MEM_SIZE 32

struct list
{
    
int size;
    
int *link;
}
;

/*
 * 初始化顺序表
 
*/

int initOrderTable(struct list *p)
{
    (
*p).link = (int *)malloc((*p).size*MEM_SIZE);

    
if(!(*p).link)
    
{
        printf(
"分配不成功");
    }

    
else
    
{
        
        printf(
"分配成功");
        (
*p).size = 0;
    }


    
return 1;
}


/*
 * 表是否为空
 
*/

bool isEmpty(struct list *p)
{
    
if((*p).size ==0 )
    
{
        
return true;    
    }


    
return false;

}


/*
 * 插入表
 
*/

int insertOrderTable(struct list *p,int i)
{
    
// 空表的情况
    if((*p).size ==0 )
    
{
        (
*p).link[0= i;
        (
*p).size++;    
    }

    
else
    
{
        (
*p).link[(*p).size] = i;
        (
*p).size++;
    }


    
return 1;
}


/*
 * 遍历表
 
*/

int travelOrderTable(struct list *p)
{
    
// 首先判断是否为空
    printf("遍历表");    
    
if((*p).size ==0)
    
{
        printf(
"表为空");
    }

    
else
    
{
        
for(int i=0; i<(*p).size; i++)
        
{
            printf(
"%5d ",(*p).link[i]);
        }

    }


    
return 1;
}


/*
 * 更新表
 
*/

int updateOrderTable(struct list *p,int pos,int value)
{
    
//去除其他判断 仅供测试
    (*p).link[pos-1= value;

    
return 1;
}


/*
 * 查找表
 
*/

int searchOrderTable(struct list *p,int value)
{
    
for(int i=0; i<(*p).size; i++)
    
{
        
if((*p).link[i] == value)
        
{
            printf(
"数据找到");
            
return 1;
        }

    }

    
return 0;
}


/*
 * 删除表
 
*/

int delOrderTable(struct list *p,int value)
{
    
int i, j;
    
/* 从线性表中顺序查找出值为value的第一个元素 */
    
for(i = 0; i < (*p).size; i++){
        
if((*p).link[i] == value){    
            
break;
        }

    }

    
/* 若查找失败,表明不存在值为value的元素,返回0 */
    
if(i == (*p).link[i]){
        
return 0;
    }

    
/* 删除值为x的元素L->list[i] */
    
for(j = i + 1; j < (*p).size; j++){
        (
*p).link[j-1= (*p).link[j];
    }

    (
*p).size--;
    
return 1;
}


/*
 * 主程序入口
 
*/

int main(int argc, char* argv[])
{
    
struct list p;

    printf(
"请输入size:  ");

    scanf(
"%d",&p.size);

    initOrderTable(
&p);

    insertOrderTable(
&p,12);

    
// 申请内存空间大小
    
//s = (char *)malloc(p.size*MEM_SIZE);
    
//p.link = gets(s);
    
    printf(
" ");

    
if(isEmpty(&p))
    
{
        printf(
"表为空!");
    }

    
else
    
{
        printf(
"表不为空!");
    }


    printf(
" ");
    travelOrderTable(
&p);
    printf(
" ");

    insertOrderTable(
&p,23);
    
    printf(
" ");
    travelOrderTable(
&p);
    printf(
" ");

    updateOrderTable(
&p,2,333);
    printf(
" ");

    travelOrderTable(
&p);
    printf(
" ");
    searchOrderTable(
&p,333);
    
    printf(
" ");
    
//printf("size:%d,  maxSize:%d,  name:%s  ",p.size,p.maxSize,p.link);
    delOrderTable(&p,12);
    travelOrderTable(
&p);
    printf(
" ");

    
return 0;
}



 

 

/*
 * 线性表链式存储
 
*/


#include 
"stdafx.h"
#include 
<stdio.h>
#include 
<malloc.h>

#define MAX_SIZE 100

struct link
{
    
int data;
    
struct link *next;
}
;

/*
 * 初始化链接表
 
*/

int initLinkTable(struct link **p)
{
    
*= NULL;
    
return 1;
}


/*
 * 插入数据
 
*/

int insertLinkTable(struct link **p,int value)
{
    
struct link *newP;
        
    newP 
= (struct link *)malloc(sizeof(struct link));
    
    
if(newP == NULL)
    
{
        printf(
"内存分配失败,退出运行! ");
    }

    
else
    
{
        (
*newP).data = value;
        (
*newP).next = *p;

        
*= newP;
    }


    
return 1;
}


/*
 * 遍历表
 
*/

int travelLinkTalbe(struct link *p)
{
    
while(p != NULL)
    
{
        printf(
"%d  ",(*p).data);
        p
= (*p).next;
    }

    printf(
" ");
 
    
return 1;
}


/*
 * 更新表
 
*/

int updateLinkTable(struct link *p,int oldValue,int newValue)
{
    
while(p != NULL)
    
{
        
if((*p).data == oldValue)
        
{
            (
*p).data = newValue;
            printf(
"Updated Success!  ");
            
return 1;
        }

        p
= (*p).next;
    }


    
return 0;
}


/*
 * 删除表
 
*/

int delLinkTable(struct link *p,int value)
{
    
struct link *temp;

    
while(p != NULL)
    
{
        
if((*p).data == value)
        
{
            
break;
        }

        temp 
= p;
        p
= (*p).next;
    }


    
// 末尾
    if(p == NULL)
    
{
        printf(
"Not Find!  ");
        
return 0;
    }


    
// 表头
    if(temp == NULL)
    
{
        p 
= (*p).next;
        printf(
"Deleted Success!  ");
    }

    
else
    
{
        (
*temp).next = (*p).next;
        printf(
"Deleted Success!  ");
    }


    
return 1;
}


/*
 * 插入表
 
*/

int insertLinkTable(struct link *p,int pos,int value)
{
    
int i=0;

    
struct link *newP,*temp;

    
while(p)
    
{
        temp 
= p;
        p 
= (*p).next;

        
if(pos == i)
        
{
            
break;
        }

        i
++;
    }


    newP 
= (struct link *)malloc(sizeof(struct link));
    
    
if(newP == NULL)
    
{
        printf(
"内存分配失败,退出运行! ");
    }

    
else
    
{
        (
*newP).data = value;
        (
*newP).next = p;

        (
*temp).next = newP;
    }


    
return 1;
}


/*
 * 程序入口
 
*/

int main(int argc, char* argv[])
{
    
struct link *p;

    printf(
"Link Table! ");
    
    initLinkTable(
&p);

    insertLinkTable(
&p,12);

    insertLinkTable(
&p,33);

    
    insertLinkTable(
&p,55);
    travelLinkTalbe(p);

    updateLinkTable(p,
33,3322);

    travelLinkTalbe(p);

    delLinkTable(p,
121);
    travelLinkTalbe(p);

    delLinkTable(p,
12);
    travelLinkTalbe(p);

    insertLinkTable(p,
1,0);
    travelLinkTalbe(p);

    
return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值