此为顺序表的一个C语言实现过程,其中对每一行代码进行了标注,同时为了方便理解顺序表的存储,逻辑与物理是相同的。也将存储地址一同显示出来了。
#include<stdio.h>
#include<stdlib.h>
#define MAX 1024
typedef struct
{
int data[MAX];//data是个数组,定义了最大长度的数组
int last;//就是个位置,没有特殊含义
}linearlist;
//定义指针是传入地址,直接对数进行操作
void Listlist(linearlist* list)
{
int i;
printf("当前线性表的状态:\n");
if(list->last==0)//声明对象list,对象内赋值位置成员last
printf("当前顺序表为空");
else
for(i=0;i<(list->last);i++)
printf("注释正在遍历数组,输出所有值\n");
printf("[%4d]",list->data[i]);//小于值,则遍历输出数组
printf("\n");
}
void Output(linearlist* list)
{
system("cls");
printf("----------------顺序表--------------\n");
printf("- a:追加一个节点 i:插入一个节点 -\n");
printf("- d:删除一个节点 e:退出 -\n");
printf("--------------升级版----------------\n");
printf("此时顺序表(数组)的长度:%d\n",list->last);//list的last是从0开始的
int i;
for(i=0;i<list->last;i++)//35
printf("数据是%d,存储地址是%d\n",list->data[i],&list->data[i]);//34
Listlist(list);
}
linearlist* CreateList()
{
linearlist* list=(linearlist*)malloc(sizeof(linearlist));//分配地址空间,相当于java、c++的new方法
list->last=0;//对第一个赋值为零,此时数组内为0
return list;
}
void AppendNode(linearlist* list,int n)//追加结点
{
if(list->last<MAX)//如果此时最后一个数的位置小于预定义的数组的长度,则执行
{
list->data[list->last]=n;//直接定位到数组的相应元素
list->last+=1;//数组或顺序表的长度
}
}
void InsertNode(linearlist* list,int n,int pos){//插入结点
int j;
if(pos<0||pos>(list->last))//53
printf("超出顺序表的范围!");
else
{
for(j=list->last;j>=pos;j--)
list->data[j+1]=list->data[j];//插入结点后每个元素向后移动一个单位
list->data[pos]=n;//对插入的单位进行赋值
list->last++;//最大值增加一个
}
}
void DeleteNode(linearlist* list,int pos)//删除结点
{
int j;
if(pos<0||(pos>list->last))//超出数组范围
printf("删除的节点位置超出顺序标的范围!");
else
{
for(j=pos;j<list->last;j++)
list->data[j]=list->data[j+1];//每个数据都向前移动一个位置
list->last--;
}
}
void pritln(linearlist* list)
{
int i;
for(i=0;i<list->last;i++)//35
printf("数据是%d,存储地址是%d\n",list->data[i],&list->data[i]);//34
}
int main()
{
int key,pos;
char ch;
linearlist* list;
list=CreateList();
while(1)//此处是一个无限循环
{
Output(list);//每次添加完数据后都执行此语句,清空界面
printf("请选择");
ch=getchar();
fflush(stdin);
if(ch=='a')
{
printf("请输入要追加的数据");
scanf("%d",&key);
AppendNode(list,key);
}
else if(ch=='i')
{
printf("请输入要插入的位置");
scanf("%d",&pos);//100
printf("请输入要插入的数据");
scanf("%d",&key);
InsertNode(list,key,pos);
}
else if(ch=='d')
{
printf("请输入要删除的位置");
scanf("%d",&pos);
DeleteNode(list,pos);
}
else if(ch=='e')
exit(0);
Output(list);
fflush(stdin);//清空输入输出
}
pritln(list);
return 0;
}
本文是根据课本《C语言从入门到精通》中的顺序表整理出来的。如有侵权,请直接联系我。本博客将会很快删除