结构体顺序表的操作

 顺序表所有操作代码:

head.h:

  1 #ifndef __HEAD_H__
  2 #define __HEAD_H__
  3 #include<stdio.h>
  4 #include<string.h>
  5 #include<stdlib.h>
  6 enum num
  7 {
  8     FALSE=-1,
  9     SUCCESS
 10 };
 11 #define MAXSIZE 7
 12 typedef int datatype;
 13 typedef struct SQLIST
 14 {
 15     datatype data[MAXSIZE];
 16     int len;
 17 }sqlist;
 18 sqlist* create();
 19 int full(sqlist*list);
 20 int insert_rear(datatype element,sqlist*list);  
 21 int output(sqlist*list);
 22 int delete_rear(sqlist*list);
 23 void search_index(sqlist*list,int index);
 24 void change_index(sqlist*list,int index,datatype element);
 25 void insert_index(sqlist*list,int index,datatype element);
 26 int delete_index(sqlist*list,int index);
 27 int search_element(sqlist*list,datatype key);   
 28 int delete_repeat(sqlist*list);
 29 void Bubble(sqlist*list);
 30 void simeple_sort(sqlist*list);
 31 sqlist* free_space(sqlist*list);
 32 #endif  

 main.c:

  1 #include "head.h"
  2 int main(int argc, const char *argv[])
  3 {
  4     //创建顺序表堆区
  5     sqlist *list=create();
  6     //循环调用尾插函数
  7     int n;
  8     datatype element;//
  9     printf("please enter n:");
 10     scanf("%d",&n);
 11     for(int i=0;i<n;i++)
 12     {
 13         printf("please enter %d inser element:",i+1);
 14         scanf("%d",&element);
 15         int flag=insert_rear(element,list);
 16         if(flag==FALSE)
 17         {
 18             puts("NULL or FULL");
 19             break;
 20         }
 21     }
 22     //遍历
 23     output(list);
 24     //尾删
 25     delete_rear(list);
 26     delete_rear(list);
 27     output(list);
 28     //按下标查找
 29     int index;
 30     printf("please enter search index:");
 31     scanf("%d",&index);
 32     search_index(list,index);
 33     //按任意下标修改
 34     printf("please enter change index:");
 35     scanf("%d",&index);
 36     printf("please enter change element:");
 37     scanf("%d",&element);
 38     change_index(list,index,element);
 39     output(list);
 40     //任意位置插入
 41     printf("please enter insert index:");
 42     scanf("%d",&index);
 43     printf("please enter insert element:");
 44     scanf("%d",&element);
 45     insert_index(list,index,element);
 46     output(list);
 47     //任意位置删除
 48     printf("please enter delete index:");
 49     scanf("%d",&index);
 50     delete_index(list,index);
 51     output(list);
 52     //按任意元素查找
 53     datatype key;
 54     printf("please enter search key:");
 55     scanf("%d",&key);
 56     int s=search_element(list,key);
 57     printf("search by element: %d\n",s);
 58     //顺序表去重
 59     delete_repeat(list);
 60     output(list);
 61     //按顺序表任意元素删除
 62     printf("please enter search key:");
 63     scanf("%d",&key);
 64     int d=search_element(list,key);
 65     printf("search by element: %d\n",d);
 66     delete_index(list,d);
 67     output(list);
 68     //顺序表按任意元素修改
 69     printf("please enter search key:");
 70     scanf("%d",&key);
 71     for(int i=0;i<list->len;i++)
 72     {
 73         int c=search_element(list,key);
 74         printf("search by element: %d\n",c);
 75         if(c<0)
 76             break;
 77         else
 78         {
 79             printf("please enter change element:");
 80             scanf("%d",&element);
 81             change_index(list,c,element);
 82         }
 83     }
 84     output(list);
 85     //顺序表排序
 86     //1.冒泡排序
 87     Bubble(list);
 88     output(list);
 89     //2.简单排序
 90     simeple_sort(list);
 91     output(list);
 92     //释放内存
 93     list=free_space(list);
 94     return 0;
 95 }    

test.c:

  1 #include "head.h"
  2 //创建顺序表堆区
  3 sqlist* create()
  4 {
  5     sqlist *list=(sqlist*)malloc(sizeof(sqlist));
  6     if(NULL==list)
  7         return NULL;
  8     memset(list->data,0,sizeof(list->data));//数据元素清零
  9     list->len=0;//顺序表长度清零
 10     return list;//list类型为sqlist*
 11 }
 12 //判断顺序表满
 13 int full(sqlist*list)
 14 {
 15     return list->len==MAXSIZE?FALSE:SUCCESS;
 16 }
 17 //尾插
 18 int insert_rear(datatype element,sqlist*list)
 19 {
 20     if(NULL==list || full(list))
 21         return FALSE;
 22     list->data[list->len++]=element;
 23     return SUCCESS;
 24 }
 25 //判断顺序表空
 26 int empty(sqlist*list)//主函数不调用不声明
 27                       //下面函数可直接使用
 28 {
 29     return list->len==0?FALSE:SUCCESS;
 30 }
 31 //遍历
 32 int output(sqlist*list)
 33 {
 34     if(NULL==list || empty(list))
 35         return FALSE;
 36     for(int i=0;i<list->len;i++)
 37     {
 38         printf("%-4d",list->data[i]);
 39     }
 40     puts("");
 41 }
 42 //尾删
 43 int delete_rear(sqlist*list)
 44 {
 45     if(NULL==list || empty(list))
 46         return FALSE;
 47     list->len--;//只是不显示,不能真正删除
 48     return SUCCESS;
 49 }
 50 //按下标查找
 51 void search_index(sqlist*list,int index)
 52 {
 53     if(NULL==list||empty(list)||index<0||index>=list->len)
 54     {
 55         puts("error");
 56         return;
 57     }
 58     printf("search by index :%d\n",list->data[index]);
 59 }
 60 //按任意下标修改
 61 void change_index(sqlist*list,int index,datatype element)
 62 {
 63     if(NULL==list||empty(list)||index<0||index>=list->len)
 64     {
 65         puts("erro");
 66         return;
 67     }
 68     list->data[index]=element;
 69 }
 70 //任意位置插入
 71 void insert_index(sqlist*list,int index,datatype element)
 72 {
 73     if(NULL==list||full(list)||index<0||index>list->len)
 74     {
 75         puts("error");
 76         return;
 77     }
 78     for(int i=list->len-1;i>=index;i--)
 79     {
 80         list->data[i+1]=list->data[i];
 81     }
 82     list->data[index]=element;
 83     list->len++;
 84 }
 85 //任意位置删除
 86 int delete_index(sqlist*list,int index)
 87 {
 88     if(NULL==list||empty(list)||index<0||index>=list->len)
 89     {
 90         puts("error");
 91         return FALSE;
 92     }
 93     for(int i=index+1;i<list->len;i++)
 94     {
 95         list->data[i-1]=list->data[i];
 96     }
 97     list->len--;
 98     return SUCCESS;
 99 }
100 //按任意元素查找
101 int search_element(sqlist*list,datatype key)
102 {
103     //int index=-1;
104     if(NULL==list || empty(list))
105         return FALSE;
106     for(int i=0;i<list->len;i++)
107     {
108         if(list->data[i]==key)
109         {
110             //index=i;
111             return i;//返回第一个key的下标
112         }
113     }
114     return FALSE;
115 }
116 //顺序表去重
117 int delete_repeat(sqlist*list)
118 {
119     if(NULL==list || empty(list))
120         return FALSE;
121     for(int i=0;i<list->len-1;i++)
122     {
123         for(int j=i+1;j<list->len;j++)
124         {
125             if(list->data[i]==list->data[j])
126             {
127                 delete_index(list,j);
128                 j--;//防止漏删
129             }
130         }
131     }
132     return SUCCESS;
133 }
134 //顺序表按任意元素删除
135 //顺序表按任意元素修改
136 //顺序表排序
137   //1.冒泡排序//   
138 void Bubble(sqlist*list)
139 {
140     for(int i=1;i<list->len;i++)
141     {
142         for(int j=0;j<list->len-i;j++)
143         {
144             if(list->data[j]>list->data[j+1])
145             {
146                 datatype t=list->data[j];
147                 list->data[j]=list->data[j+1];
148                 list->data[j+1]=t;
149             }
150         }
151     }
152   //2.简单排序
153 void simeple_sort(sqlist*list)
154 {
155     for(int i=0;i<list->len-1;i++)
156     {
157         int min=i;
158         for(int j=i+1;j<list->len;j++)
159         {
160             if(list->data[min]>list->data[j])
161             {
162                 min=j;
163             }
164         }
165         if(min!=i)
166         {
167             datatype t=list->data[min];
168             list->data[min]=list->data[i];
169             list->data[i]=t;
170         }
171     }
172 }
173 //释放内存
174 sqlist* free_space(sqlist*list)
175 {
176     if(NULL==list)
177         return NULL;
178     free(list);
179     list=NULL;
180     return  NULL;
181 }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 

1.按元素删除(只删第一个)、按元素修改

 2.顺序表排序

冒泡排序:

 简单排序:

3.释放内存

流程图:

 

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值