#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define maxsize 10//数组最大长度
typedef struct array
{
int data[maxsize];
int last;//指向数组中当前存储的最后一个数据
}arr,*parr;
void set_arr_null(arr *pseq);
void init_arr(arr *pseq);
int add_arr_element(arr *pseq);
int del_arr_element(arr *pseq);
void print_arr_element(arr *pseq);
int main()
{
arr *pbuf=(arr *)malloc(sizeof(arr));
if(NULL==pbuf)
{
printf("pbuf malloc failed\n");
return -1;
}
//设置顺序表为空
set_arr_null(pbuf);
//初始化顺序表
init_arr(pbuf);
while(1)
{
printf("\t1:添加数组元素\n\t2:删除数组元素\n\t3:查看数组元素\n\t4:退出\n");
printf("请输入选项:");
int sel=0;
scanf("%d",&sel);
getchar();
switch(sel)
{
case 1:
add_arr_element(pbuf);
break;
case 2:
del_arr_element(pbuf);
break;
case 3:
print_arr_element(pbuf);
break;
case 4:
exit(0);
default:
printf("reinput 1-4\n");
}
}
return 0;
}
void set_arr_null(arr *pseq)
{
pseq->last=0;
}
void init_arr(arr *pseq)
{
int i=0;
for(i=0;i<maxsize;i++)
{
pseq->data[i]=0;
}
}
int add_arr_element(arr *pseq)
{
printf("%p %p",pseq->data,&pseq->last);
printf("last:%d maxsize:%d\n",pseq->last,maxsize);
if(pseq->last+1>maxsize)
{
printf("overflow\n");
return -1;
}
printf("请输入添加的位置(从1开始)和数值:\n");
int pos=0;
int val=0;
scanf("%d %d",&pos,&val);
if(pos>pseq->last+1)
{
printf("请在1--%d之间添加数值\n",pseq->last+1);
return -1;
}
int i=0;
for(i=pseq->last;i>=pos;i--)
{
pseq->data[i+1]=pseq->data[i];
}
pseq->data[i+1]=val;
pseq->last++;
return 0;
}
int del_arr_element(arr *pseq)
{
if(NULL==pseq)
{
printf("pseq null\n");
return -1;
}
if(pseq->last<=0)
{
printf("underflow\n");
return -1;
}
int pos=0;
printf("请输入删除的位置(从1开始):\n");
scanf("%d",&pos);
if(pos>pseq->last)
{
printf("只能在1--%d之间删除\n",pseq->last);
return -1;
}
int i=0;
for(i=pos;i<pseq->last+1;i++)
{
pseq->data[i]=pseq->data[i+1];
}
pseq->last--;
return 0;
}
void print_arr_element(arr *pseq)
{
int i=0;
if(pseq->last==0)
{
printf("array null\n");
return;
}
for(i=1;i<pseq->last+1;i++)
{
printf("%d ",pseq->data[i]);
}
printf("\n");
}
#include <string.h>
#include <stdlib.h>
#define maxsize 10//数组最大长度
typedef struct array
{
int data[maxsize];
int last;//指向数组中当前存储的最后一个数据
}arr,*parr;
void set_arr_null(arr *pseq);
void init_arr(arr *pseq);
int add_arr_element(arr *pseq);
int del_arr_element(arr *pseq);
void print_arr_element(arr *pseq);
int main()
{
arr *pbuf=(arr *)malloc(sizeof(arr));
if(NULL==pbuf)
{
printf("pbuf malloc failed\n");
return -1;
}
//设置顺序表为空
set_arr_null(pbuf);
//初始化顺序表
init_arr(pbuf);
while(1)
{
printf("\t1:添加数组元素\n\t2:删除数组元素\n\t3:查看数组元素\n\t4:退出\n");
printf("请输入选项:");
int sel=0;
scanf("%d",&sel);
getchar();
switch(sel)
{
case 1:
add_arr_element(pbuf);
break;
case 2:
del_arr_element(pbuf);
break;
case 3:
print_arr_element(pbuf);
break;
case 4:
exit(0);
default:
printf("reinput 1-4\n");
}
}
return 0;
}
void set_arr_null(arr *pseq)
{
pseq->last=0;
}
void init_arr(arr *pseq)
{
int i=0;
for(i=0;i<maxsize;i++)
{
pseq->data[i]=0;
}
}
int add_arr_element(arr *pseq)
{
printf("%p %p",pseq->data,&pseq->last);
printf("last:%d maxsize:%d\n",pseq->last,maxsize);
if(pseq->last+1>maxsize)
{
printf("overflow\n");
return -1;
}
printf("请输入添加的位置(从1开始)和数值:\n");
int pos=0;
int val=0;
scanf("%d %d",&pos,&val);
if(pos>pseq->last+1)
{
printf("请在1--%d之间添加数值\n",pseq->last+1);
return -1;
}
int i=0;
for(i=pseq->last;i>=pos;i--)
{
pseq->data[i+1]=pseq->data[i];
}
pseq->data[i+1]=val;
pseq->last++;
return 0;
}
int del_arr_element(arr *pseq)
{
if(NULL==pseq)
{
printf("pseq null\n");
return -1;
}
if(pseq->last<=0)
{
printf("underflow\n");
return -1;
}
int pos=0;
printf("请输入删除的位置(从1开始):\n");
scanf("%d",&pos);
if(pos>pseq->last)
{
printf("只能在1--%d之间删除\n",pseq->last);
return -1;
}
int i=0;
for(i=pos;i<pseq->last+1;i++)
{
pseq->data[i]=pseq->data[i+1];
}
pseq->last--;
return 0;
}
void print_arr_element(arr *pseq)
{
int i=0;
if(pseq->last==0)
{
printf("array null\n");
return;
}
for(i=1;i<pseq->last+1;i++)
{
printf("%d ",pseq->data[i]);
}
printf("\n");
}

本文介绍了如何使用C语言实现顺序表的基本操作,包括初始化顺序表、添加元素、删除元素和打印元素。通过定义结构体`arr`表示顺序表,实现了动态内存分配和相关操作函数,确保了操作的安全性和有效性。

被折叠的 条评论
为什么被折叠?



