设为首页 加入收藏

TOP

c语言数据结构之线性表的顺序存储结构(二)
2019-09-14 00:51:43 】 浏览:120
Tags:语言 数据结构 线性 顺序 存储 结构
      直接修改该元素的值;

1 //更改函数,其中,elem为要更改的元素,newElem为新的数据元素
2 sqlt amend_SeqList(sqlt s, int elem, int newElem){
3     int p=select_SeqList(s,elem);
4     s.head[p-1]=newElem;
5     //由于返回的是元素在顺序表中的位置,所以p-1就是该元素在数组中的下标
6     return s;
7 }

以下实现增删改查的整体顺序存储结构线性表

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 #define Size 5
  5 typedef struct SeqList{
  6     int * head;//声明了一个名为head的长度不确定的数组,也叫“动态数组”
  7     int length;//记录当前顺序表的长度
  8     int size;//记录顺序表分配的存储容量
  9 }sqlt;
 10 sqlt init_SeqList(){
 11     sqlt s;
 12     s.head=(int*)malloc(sizeof(int)*Size);
 13     //构造一个空的顺序表,动态申请存储空间
 14     if(!s.head)//如果申请失败,作出提示并直接退出程序
 15     {
 16         printf("初始化失败\n");
 17         exit(0);
 18     }
 19     s.length=0;//空表的长度初始化为0
 20     s.size=Size;//空表的初始存储空间为Size
 21     return s;
 22 }
 23 //插入函数,其中,elem为插入的元素,p为插入到顺序表的位置
 24 sqlt insert_SeqList(sqlt s,int elem,int p)
 25 {
 26     //判断插入本身是否存在问题(如果插入元素位置比整张表的长度+1还大(如果相等,是尾随的情况),或者插入的位置本身不存在,程序作为提示并自动退出)
 27     if(p>s.length+1||p<1){
 28         printf("插入的位置有问题\n");
 29         return s;
 30     }
 31     //做插入操作时,首先需要看顺序表是否有多余的存储空间提供给插入的元素,如果没有,需要申请
 32     if(s.length>=s.size){
 33         s.head=(int *)realloc(s.head,(s.size+1)*sizeof(int));
 34         if(!s.head){
 35             printf("存储分配失败\n");
 36         }
 37     }
 38     //插入操作,需要将从插入位置开始的后续元素,逐个后移
 39     for(int i=s.length-1;i>=p-1;i--){
 40         s.head[i+1]=s.head[i];
 41     }
 42     //后移完成后,直接将所需插入元素,添加到顺序表的相应位置
 43     s.head[p-1]=elem;
 44     s.length++;//由于添加了元素,所以长度+1
 45     return s;
 46 }
 47 sqlt del_SeqList(sqlt s,int p){
 48     if(p>s.length||p<1){
 49         printf("被删除的元素有误\n");
 50         return s;
 51     }
 52     //删除操作
 53     for(int i=p;i<s.length;i++){
 54         s.head[i-1]=s.head[i];
 55     }
 56     s.length--;//删除一个元素表的长度要减1
 57     return s;
 58 }
 59 //查找函数,其中,elem表示要查找的数据元素的值
 60 int select_SeqList(sqlt s, int elem){
 61     for(int i=0;i<s.length;i++){
 62         if(s.head[i]==elem){
 63             return i+1;
 64         }
 65     }
 66     return -1;//如果查找失败,返回-1
 67 }
 68 //更改函数,其中,elem为要更改的元素,newElem为新的数据元素
 69 sqlt amend_SeqList(sqlt s, int elem, int newElem){
 70     int p=select_SeqList(s,elem);
 71     s.head[p-1]=newElem;
 72     //由于返回的是元素在顺序表中的位置,所以p-1就是该元素在数组中的下标
 73     return s;
 74 }
 75 //输出顺序表中元素的函数
 76 void display_SeqList(sqlt s){
 77     for(int i=0; i<s.length; i++){
 78         printf("%d",s.head[i]);
 79     }
 80     printf("\n");
 81 }
 82 
 83 int main(){
 84     sqlt s1=init_SeqList();
 85     //向顺序表中添加元素
 86     for(int i=1;i<=Size;i++){
 87         s1.head[i-1]=i;
 88         s1.length++;
 89     }
 90     printf("原顺序表:\n");
 91     display_SeqList(s1);
 92 
 93     printf("删除元素2:\n");
 94     s1=del_SeqList(s1,2);
 95     display_SeqList(s1);
 96 
 97     printf("在第3的位置插入元素5:\n");
 98     s1=insert_SeqList(s1,5,3);
 99     s1=insert_SeqList(s1,5,3);
100     s1=insert_SeqList(s1,5,3);
101     s1=insert_SeqList(s1,5,3);
102     display_SeqList(s1);
103 
104     printf("查找元素3的位置:\n");
105     int p=select_SeqList(s1,3);
106     printf("%d\n",p);
107 
108     printf("将元素3改为6:\n");
109     s1=amend_SeqList(s1,3,6);
110     display_SeqList(s1);
111     return 0;
112 }

 

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言输入单字符避免回车的四种方.. 下一篇C 编程环境搭建 Window 篇

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目