这个表还行吗
#include #include
#define MAXLISTSIZE 1024//定义顺序表的容量
typedef struct //定义顺序表的节点类型
{
int data[MAXLISTSIZE];//顺序表
int last; //顺序表的元素个数
}linearlist;
void ListList(linearlist *list) //打印线性顺序表
{
int i;
printf("当前线性表的状态:\n");
if (list->last==0) //线性表为空
printf("当前线性表为空");
else
for (i = 0;i < (list->last);i++)//循环遍历顺序表
printf("%4d", list->data[i]);
printf("\n");
}
void Output(linearlist *list)
{
system("cls"); //清屏
printf("顺序表\n"); //输入功能菜单
printf("a:追加一个节点 b:插入一个节点\n");
printf("c:删除一个节点 e:退出\n");
ListList(list);
}
linearlist *CreateList() //创建线性顺序表
{
linearlist *list = (linearlist*)malloc(sizeof(linearlist));//分配空间
list->last = 0; //初始化头结点值
return list; //返回初始化头结点指针
}
void AppendNode(linearlist* list, int n)//追加节点
{
if (list->last < MAXLISTSIZE);
{
list->data[list->last] = n;//初始化节点值
list->last += 1; //顺序表长度加1
}
}
void lnsertNode(linearlist* list, int n, int p)//插入节点
{
int j;
if (p<0 || p>list->last)
printf("所插入的位置超出顺序表的范围\n");
else
{
for (j = list->last;j>=p;j--)//逆向遍历顺序表
list->data[j+1] = list->data[j];//元素后移
list->data[p] = n;//指向节点赋值
list->last++; //顺序表长度加1
}
}
void DeleteNode(linearlist* list,int p)//删除节点
{
int j;
if ((p<0) || (p>list->last))//所要删除的位置超出顺序表的范围
printf("所要删除的位置超出顺序表的范围\n");
else
{
for (j = p;jlast;j++) //遍历顺序表
list->data[j] = list->data[j+1];//元素前移
list->last--; //顺序表长度加1
}
}
int main()
{
int k; //元素值
int p; //下标
char ch;
linearlist *list;
list = CreateList();//创建顺序表
while(1)
{
Output(list);
printf("请选择:");
ch = getchar();
fflush(stdin);//清除缓存
if (ch == 'a') //追加
{
printf("请输入要追加的数据:");
scanf("%d", &k);
AppendNode(list,k);
}
else if(ch == 'b') //插入
{
printf("请输入要插入数据的位置:");
scanf("%d", &p);
printf("请输入要插入的数据:");
scanf("%d", &k);
lnsertNode(list,k,p);
}
else if(ch == 'c') //删除
{
printf("请输入要删除的位置:");
scanf("%d", &p);
DeleteNode(list,p);
}
else if(ch == 'e') //退出
exit(0);
Output(list);
fflush(stdin);
}
return 0;
}
我是新人