#include <stdio.h>
#include <stdlib.h>
typedef struct Table{
int * head;
int length;
int size;
}table;
//初始化
void initTable(table *t,int size){
(*t).head=(int*)malloc(size*sizeof(int));
if (!(*t).head)
{
printf("初始化分配失败");
return;
}
(*t).length=0;
(*t).size=size;
}
//增加元素 ,index表示插入的位置,即第几个数
void add(table *t,int newElement,int index){
int i =0;
if(index<1|| index>(*t).length+1){
printf("插入位置 %d 不对!,现有数据总数为 %d \n",index,(*t).length);
return;
}
if((*t).length>=(*t).size){
(*t).head = (int*)realloc((*t).head,((*t).size+1)*sizeof(int));
if (!(*t).head) {
printf("存储分配失败");
return;
}
(*t).size += 1;
}
//如果插入位置小于等于length,则需要把元素后移
for(i =(*t).length-1;i>=index-1;i--){
(*t).head[i+1] = (*t).head[i];
}
(*t).head[index-1] = newElement;
//不能使用(*t).head[i] = newElement;
(*t).length++;
}
//查询元素,返回该元素是第几个
int search(table t,int element){
int i =0;
for(i = 0;i<t.length;i++){
if(t.head[i] == element)
return i+1;
}
return -1;
}
//删除元素
int deleteElement(table *t,int element) {
int index = search(*t,element);
int i;
if(index == -1){
printf("元素 %d 不存在!\n",element);
return -1;
}else{
for(i =index;i<(*t).length-1;i++){
(*t).head[i] = (*t).head[i+1];
}
(*t).length--;
printf("元素 %d 删除成功!\n",element);
return 1;
}
}
//修改元素,index为第几个元素
int modify(table *t,int oldElement,int newElement){
int index = search(*t,oldElement);
if(index == -1){
printf("元素 %d 不存在,无法修改!\n",oldElement);
return -1;
}
(*t).head[index-1] = newElement;
printf("元素 %d 修改为 %d 成功!\n",oldElement,newElement);
return 1;
}
//打印结构体数组中的元素
void display(table t){
if(t.length == 0 )
printf("数组为空!");
for (int i=0;i<t.length;i++) {
printf("%d ",t.head[i]);
}
printf("\n");
}
//主函数
int main(){
table t;
initTable(&t,10);
int i=0;
//增加元素
printf("增加元素:\n");
for(i =0;i<10;i++){
add(&t,i+1,i+1);
}
display(t);
// 删除元素
printf("删除元素11:\n");
deleteElement(&t,11);
display(t);
//修改
printf("修改元素100为10:\n");
modify(&t,100,10);
printf("修改元素10为11:\n");
modify(&t,10,11);
display(t);
//查询
printf("查询元素8:\n");
int index = search(t,8);
printf("元素8是第 %d 个:\n",index);
return 0;
}
数据结构C语言版清华大学严蔚敏(学习笔记总结1,代码在下面)——顺序表、链表、循环链表、双向链表、结点的插入删除(前面是笔记方便理解,最下面有详细代码)
最新推荐文章于 2022-09-07 01:07:22 发布