//顺序表增删查改
#include <stdio.h>
#include <stdlib.h>
#define Size 5 //顺序表的容量
//结构体
typedef struct table{
int length;
int size;
int *head;
}table;
//初始化
table initt(){
table t;
t.head = (int *) malloc (Size * sizeof(int));
if(!t.head) {
printf("初始化失败");
exit(0);
}
t.length = 0;
t.size = Size;
return t;
}
//给顺序表赋值1234
table fuzhi(table t){
int i;
for(i = 1; i < 5; i++){
t.head[i] = i;
t.length++;
}
return t;
}
//依次输出顺序表元素
void displayt(table t)
{
int i;
printf("顺序表元素依次为:");
for (i = 1; i <= t.length; i++)
{
printf("%d ",t.head[i]);
}
printf("\n");
}
//增
//elem:元素值 add:元素位置(位置从1开始)
table addt(table t, int elem, int add)
{
if(add < 1 || add > t.length + 1){
printf("位置不正确");
return t;
}
if(t.length == t.size)
{
printf("容量不够,需要扩容");
t.head = (int *) realloc(t.head,(Size+1) * sizeof(int));
if(!t.head){
printf("分配失败");
return t;
}
t.size++;
return t;
}
int i;
for(i = t.length; i>=add; i--){
t.head[i+1] = t.head[i];
}
t.length++;
t.head[add] = elem;
return t;
}
//删
//add元素位置 (add位置从1开始)
table delt(table t,int add){
if(add < 1 || add > t.length){
printf("位置不正确");
exit(0);
}
//覆盖被删元素
//数组从0开始
int i;
for(i = add; i < t.length; i++){
t.head[i] = t.head[i+1];
}
t.length--;
return t;
}
//查
//查元素值为elem元素,输出其位置
int findt(table t,int elem){
int i;
for(i = 1; i < t.length; i++){
if(t.head[i] == elem)
return i;
}
return -1;
}
//改
table changet(table t, int elem, int newelem){
int add = findt(t,elem);
t.head[add] = newelem;
return t;
}
int main()
{
table t = initt();
t = fuzhi(t);
printf("初始\n");
displayt(t);
printf("\n");
//增
//在第二位上添加 数值为9的元素
printf("增加后\n");
t = addt(t, 9, 2);
displayt(t);
printf("\n");
//删
//删去第二位的元素
printf("减少后\n");
t = delt(t,2);
displayt(t);
printf("\n");
//查
//查数值为3的元素,返回其位序
int f = findt(t,3);
printf("查找元素位于: %d\n",f);
printf("\n");
//改
//将数值为2的元素数值改为9
t = changet(t,2,9);
printf("更改后:\n");
displayt(t);
printf("\n");
return 0;
}
运行结果: