顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构 ,C语言代码实现如下
#include <stdio.h>
#include <stdlib.h>
#define MAXLISTSIZE 1024 //数组大小
//定义一个数据结构
typedef struct {
int data[MAXLISTSIZE];//存储的数据放在数组里,int类型
int last;//数组的内容大小
}LinearList;
LinearList* list;//定义全局LinearList*
void showList();
void outputDoc();
LinearList* createLinearList();
void appendNode();
void insertNode();
void delNode();
void operate();
void showList(LinearList* l) {
printf("当前线性顺序表的状态:\n");
if(l->last == 0) {
printf("当前线性顺序表为null");
} else {
int i;
for(i = 0; i < (l->last); i++) {
printf("[%d]\t",l->data[i]);
}
}
printf("\n");
}
//打印说明文档
void outputDoc() {
system("cls");
printf("线性顺序表演示:\n");
printf("a:追加一个节点; i:插入一个节点\n");
printf("d:删除一个节点; e:退出\n");
}
//创建线性顺序表
LinearList* createLinearList() {
LinearList* list = (LinearList*)malloc(sizeof(LinearList));//分配LinearList结构大小的内存,并转换为LinearList指针类型
list->last = 0;//初始化数据(节点)大小
return list;
}
//追加数据
void appendNode(LinearList* list, int data) {
if((list->last) < MAXLISTSIZE) {
list->data[list->last] = data;
list->last ++;
}
}
//插入数据,插入一个数据后,后面的数据全部向后移动一个节点
void insertNode(LinearList* list, int data, int pos) {
if(pos < 0 || pos > list->last || list->last == MAXLISTSIZE) {
char ch;
printf("所插数据超出范围!,q回到主界面!\n");
while(1) {
ch = getchar();
if(ch == 'q') {
operate();
}
}
} else {
int j;
for(j = list->last; j >= pos; j--) { //j >= pos ,把pos位置的也向后移动
list->data[j+1] = list->data[j]; //循环后数组大小+1
}
list->data[pos] = data; //数组默认从0开始,
list->last++;
}
}
//删除数据
void delNode(LinearList* list,int pos){
if(pos < 0 || pos > list->last) {
printf("所要删除的数据不在范围内!");
} else {
int j;
for(j = pos; j < list->last; j++) { //j < list.last
list->data[j] = list->data[j+1];
}
list->last--;
}
}
//操作函数
void operate(){
int data,pos;
char ch;
while(1) {
outputDoc();
showList(list);
ch = getchar();
switch(ch) {
case 'a':
printf("请插入数据:\n");
scanf("%d",&data);
appendNode(list,data);
break;
case 'i':
printf("请输入要插入的位置:\n");
scanf("%d",&pos);
printf("请输入要插入的数据:\n");
scanf("%d",&data);
insertNode(list,data,pos);
break;
case 'd':
printf("请输入要删除数据的位置:\n");
scanf("%d",&pos);
delNode(list,pos);
break;
case 'e':
system("exit");
break;
default:
printf("未知操作!\n");
break;
}
}
}
//主函数
int main() {
list = createLinearList();
operate();
return 0;
}
运行之后