线性表的 赋值,插入,与元素的删除

#include<stdio.h>
#define MAXSIZE 20
#define YES  0
#define NO   1


typedef int data_t;
typedef struct stu
{
data_t  data[MAXSIZE];
int length;
}sq_list;
sq_list *CreateListSq()//申请内存空间
{
sq_list *sq=NULL;
if(NULL==(sq=(sq_list*)malloc(sizeof(sq_list))))
{
perror("create fail:");
exit(NO);
}
sq->length=0;
return sq;
}
int  getele(sq_list *M,int i,data_t *n)//取出线性表中第i的一个元素
{
if(i>=M->length||i<0)
perror("get element fail:");
else
*n=M->data[i];
return YES;


}
/*在第i个位置插入一个元素*/
int  eleinsert(sq_list *M,int i,data_t n)
{
if(i>M->length||i<0)//判断插入位置错误
{
perror("insert fail:");
exit (-1);
}
if(i==MAXSIZE)//判断线性表是否已满
{
printf("file full:");
exit(-1);
}
int k;
if(i<M->length)//插入位置正确,但不在线性表尾部
{
for(k=M->length-1;k>=i;k--)
{
M->data[k+1]=M->data[k];
}
}
M->data[i]=n;
M->length++;


return YES;
} /*删除第i个元素*/
int  eledelete(sq_list *L,int i,int *dat)
{
if(i>=L->length||i<0)//删除位置不正确
{
perror("delete fail:");
exit(-1);
}
if(L->length==0)//线性表文件长度为空
{
perror("file is null:");
exit(-1);
}
int k;
if(i<L->length)//删除位置正确时
{
for(k=i;k<L->length;k++)
{
L->data[k]=L->data[k+1];
}
}
*dat=L->data[i];
L->length--;
return YES;
}


int print(sq_list *L)//打印整个线性表
{
int k;
int num;
if(L->length==0)
{
perror("***NULL***");
exit(-1);
}
for(k=0;k<L->length;k++)
{
getele(L,k,&num);
printf("%d\t",num);
}
printf("\n");
return YES;
}
int main(int argc, const char *argv[])
{
sq_list *sq;
sq=CreateListSq();
data_t i;
data_t k;
int tope;
for(i=0;i<5;i++)//对线性表赋值
{
sq->data[sq->length]=i;
sq->length++;
}
if(getele(sq,3,&k)==YES)
{
printf("%d\n",k);
}
print(sq);
eleinsert(sq,2,10);
print(sq);
eledelete(sq,2,&tope);
print(sq);


return 0;
}
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我来解答你的问题。 首先,我们需要定义一个结构体来表示线性表: ```c #define MAX_SIZE 100 // 线性表最大长度 typedef struct { int data[MAX_SIZE]; // 存放线性表元素 int length; // 线性表长度 } List; ``` 接下来,我们可以定义一些操作来操作这个线性表。 1. 创建线性表 ```c List* createList() { List* list = (List*)malloc(sizeof(List)); list->length = 0; return list; } ``` 2. 线性表赋值 ```c void assignList(List* list, int* arr, int n) { if (n > MAX_SIZE) { printf("数组长度超过线性表最大长度\n"); return; } for (int i = 0; i < n; i++) { list->data[i] = arr[i]; } list->length = n; } ``` 3. 销毁线性表 ```c void destroyList(List* list) { free(list); } ``` 4. 插入元素 ```c void insert(List* list, int pos, int val) { if (pos < 1 || pos > list->length + 1) { printf("插入位置不合法\n"); return; } if (list->length >= MAX_SIZE) { printf("线性表已满\n"); return; } for (int i = list->length; i >= pos; i--) { list->data[i] = list->data[i - 1]; } list->data[pos - 1] = val; list->length++; } ``` 5. 删除元素 ```c void delete(List* list, int pos) { if (pos < 1 || pos > list->length) { printf("删除位置不合法\n"); return; } for (int i = pos; i < list->length; i++) { list->data[i - 1] = list->data[i]; } list->length--; } ``` 6. 打印线性表 ```c void printList(List* list) { for (int i = 0; i < list->length; i++) { printf("%d ", list->data[i]); } printf("\n"); } ``` 这样,我们就完成了线性表的基本操作。当然,在实际应用中,我们可能还需要添加一些其他的操作,例如查找元素、排序等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值