当前位置: 首页 > news >正文

数据结构 / day03作业

1.顺序表按元素删除

//main.c#include "head.h"
int main(int argc, const char *argv[])
{sqlist *list=create_space();// printf("&list=%p\n", list);int n;int index;data_type element, key;printf("please input n;");scanf("%d", &n);for(int i=0; i<n; i++){printf("please input %d element:\n", i+1);scanf("%d", &element);int flag = append(list, element);//printf("main-->flag=%d\n", flag);if(flag==-1){puts("list full or error\n");break;}}puts("---output inputed list---\n");//printf("output inputed list\n");	output(list);putchar(10);/*puts("------");delete_tail(list);printf("the last element has been deleted\n");puts("------");delete_tail(list);printf("the last element has been deleted\n");puts("------");printf("output list after delete\n");printf("list len=%d\n", list->len);output(list);puts("------");search_by_index(list, 1);puts("------");update(list, 1, 99);printf("element 1 has been updated\n");printf("list len=%d\n", list->len);output(list);puts("------");insert(list, 1, 100);printf("postion 1 insrerted an element\n");printf("list len=%d\n", list->len);output(list);puts("------");printf("please input index for deleting:");scanf("%d", &index);delete_by_index(list, index);printf("postion %d element has been deleted\n", index);output(list);puts("---update by element---");printf("please input key for updating:");scanf("%d", &key);printf("please input  element for updating:");scanf("%d", &element);int ret = update_by_element(list, key, element);if(ret==-1){printf("key %d is not found or other error\n", key );}else{printf("element %d has been updated to %d at pos %d\n",key, element, ret );}output(list); */puts("---delete by element---");printf("please input element to delete:");scanf("%d", &element);int ret = delete_by_element(list, element);if(ret==-1){printf("element %d is not found or other error\n", element );}else{printf("element %d has been deleted\n", element);}output(list);return 0;
}

//head.h#ifndef __HEAD_H__
#define __HEAD_H__#include <string.h>
#include <stdlib.h>
#include <stdio.h>//顺序表结构体
#define MAXSIZE 20typedef int data_type;typedef struct
{//数据元素data_type data[MAXSIZE];//顺序表长度int len;}sqlist; // SQLIST --> sqlistsqlist *create_space();
int full_sqlist(sqlist*list);
int append(sqlist *list, data_type element);
int delete_tail(sqlist *list);
void output(sqlist *list);
int empty_sqlist(sqlist *list);
int insert(sqlist *list, int index, data_type element);
void search_by_index(sqlist *list, int index);
int index_out_of_range(sqlist *list, int index);
int update(sqlist *list, int index, data_type element);
int delete_by_index(sqlist *list, int index);
int search_by_element(sqlist *list, data_type element);
int update_by_element(sqlist *list, data_type key, data_type element );
int delete_by_element(sqlist *list, data_type element );#endif
//test.c#include "head.h"sqlist *create_space()
{sqlist *list = (sqlist*)malloc(sizeof(sqlist));if(NULL==list){puts("error");return NULL;}list->len=0; //顺序表初始化长度清0//数据清0memset(list->data, 0, sizeof(list->data));return list;
}int full_sqlist(sqlist*list)
{int flag = list->len==MAXSIZE;//printf("full_list-->flag=%d\n", flag);return flag;
}int empty_sqlist(sqlist *list)
{if(list->len==0){return 1;}else{return 0;}}int append(sqlist *list, data_type element)
{// printf("list=%p\n", list);   if(NULL==list || full_sqlist(list)){   return -1; }   list->data[list->len++]=element;return 0;//  }     void output(sqlist *list)
{if(NULL==list||empty_sqlist(list)){printf("list is NULL\n");return;}for(int i=0; i<list->len; i++){printf("%d\t", list->data[i]);}putchar(10);}int delete_tail(sqlist *list)
{	if(NULL==list||empty_sqlist(list)){printf("list is NULL\n");return -1;}list->len--;//不可以释放空间return 0;}int insert(sqlist *list, int index, data_type element)
{if(NULL==list || full_sqlist(list)||index>list->len||index<0 ){printf("list is NULL or index error\n");return -1;}for(int i=list->len-1; i>=index; i--){list->data[i+1] = list->data[i];}list->data[index]=element;list->len++;return 0;}int index_out_of_range(sqlist *list, int index)
{if(NULL==list||empty_sqlist(list)){printf("list is NULL or empty!");return -1;}if(index<0||index>=list->len){return 1;}else{return 0;}}void search_by_index(sqlist *list, int index)
{if(NULL==list||index_out_of_range(list, index)||empty_sqlist(list)){printf("list is NULL or index out of range");return;}data_type element = list->data[index];printf("found element:%d\n", element);}int update(sqlist *list, int index, data_type element)
{if(NULL==list||empty_sqlist(list)||index_out_of_range(list, index)){printf("list is NULL or empty or index error\n");return -1;}list->data[index] = element;return 0;}int delete_by_index(sqlist *list, int index)
{if(NULL==list || empty_sqlist(list)||index_out_of_range(list, index)){printf("list is NULL or index error\n");return -1;}for(int i=index; i<list->len-1; i++){list->data[i] = list->data[i+1];}list->len--;return 0;
}int rm_duplicate(sqlist *list)
{if(NULL==list || empty_sqlist(list)){printf("list is NULL or empty\n");return -1;}}int search_by_element(sqlist *list, data_type element)
{if(NULL==list || empty_sqlist(list)){printf("list is NULL or empty\n");return -1;}for(int i=0; i<list->len; i++){if(element==list->data[i]){return i;}}return -1;
}int update_by_element(sqlist *list, data_type key, data_type element )
{int found=-1;if(NULL==list || empty_sqlist(list)){printf("list is NULL or empty\n");return found;}for(int i=0; i<list->len; i++){if(key==list->data[i]){list->data[i] = element;found=i;}}return found;
}int delete_by_element(sqlist *list, data_type element )
{int flag=-1;if(NULL==list || empty_sqlist(list)){printf("list is NULL or empty\n");return flag;}int idx=search_by_element(list, element);if(idx==-1){return -1;}int ret=delete_by_index(list, idx);return ret;}

2 顺序表按元素修改

//main.c#include "head.h"
int main(int argc, const char *argv[])
{sqlist *list=create_space();// printf("&list=%p\n", list);int n;int index;data_type element, key;printf("please input n;");scanf("%d", &n);for(int i=0; i<n; i++){printf("please input %d element:\n", i+1);scanf("%d", &element);int flag = append(list, element);//printf("main-->flag=%d\n", flag);if(flag==-1){puts("list full or error\n");break;}}puts("---output inputed list---\n");//printf("output inputed list\n");	output(list);/*puts("------");delete_tail(list);printf("the last element has been deleted\n");puts("------");delete_tail(list);printf("the last element has been deleted\n");puts("------");printf("output list after delete\n");printf("list len=%d\n", list->len);output(list);puts("------");search_by_index(list, 1);puts("------");update(list, 1, 99);printf("element 1 has been updated\n");printf("list len=%d\n", list->len);output(list);puts("------");insert(list, 1, 100);printf("postion 1 insrerted an element\n");printf("list len=%d\n", list->len);output(list);puts("------");printf("please input index for deleting:");scanf("%d", &index);delete_by_index(list, index);printf("postion %d element has been deleted\n", index);output(list);
*/	puts("---update by element---");printf("please input key for updating:");scanf("%d", &key);printf("please input  element for updating:");scanf("%d", &element);int ret = update_by_element(list, key, element);if(ret==-1){printf("key %d is not found or other error\n", key );}else{printf("element %d has been updated to %d at pos %d\n",key, element, ret );}output(list);return 0;
}
// head.h#ifndef __HEAD_H__
#define __HEAD_H__#include <string.h>
#include <stdlib.h>
#include <stdio.h>//顺序表结构体
#define MAXSIZE 20typedef int data_type;typedef struct
{//数据元素data_type data[MAXSIZE];//顺序表长度int len;}sqlist; // SQLIST --> sqlistsqlist *create_space();
int full_sqlist(sqlist*list);
int append(sqlist *list, data_type element);
int delete_tail(sqlist *list);
void output(sqlist *list);
int empty_sqlist(sqlist *list);
int insert(sqlist *list, int index, data_type element);
void search_by_index(sqlist *list, int index);
int index_out_of_range(sqlist *list, int index);
int update(sqlist *list, int index, data_type element);
int delete_by_index(sqlist *list, int index);
int search_by_element(sqlist *list, data_type element);
int update_by_element(sqlist *list, data_type key, data_type element );#endif
// test.c#include "head.h"sqlist *create_space()
{sqlist *list = (sqlist*)malloc(sizeof(sqlist));if(NULL==list){puts("error");return NULL;}list->len=0; //顺序表初始化长度清0//数据清0memset(list->data, 0, sizeof(list->data));return list;
}int full_sqlist(sqlist*list)
{int flag = list->len==MAXSIZE;//printf("full_list-->flag=%d\n", flag);return flag;
}int empty_sqlist(sqlist *list)
{if(list->len==0){return 1;}else{return 0;}}int append(sqlist *list, data_type element)
{// printf("list=%p\n", list);   if(NULL==list || full_sqlist(list)){   return -1; }   list->data[list->len++]=element;return 0;//  }     void output(sqlist *list)
{if(NULL==list||empty_sqlist(list)){printf("list is NULL\n");return;}for(int i=0; i<list->len; i++){printf("%d\t", list->data[i]);}putchar(10);}int delete_tail(sqlist *list)
{	if(NULL==list||empty_sqlist(list)){printf("list is NULL\n");return -1;}list->len--;//不可以释放空间return 0;}int insert(sqlist *list, int index, data_type element)
{if(NULL==list || full_sqlist(list)||index>list->len||index<0 ){printf("list is NULL or index error\n");return -1;}for(int i=list->len-1; i>=index; i--){list->data[i+1] = list->data[i];}list->data[index]=element;list->len++;return 0;}int index_out_of_range(sqlist *list, int index)
{if(NULL==list||empty_sqlist(list)){printf("list is NULL or empty!");return -1;}if(index<0||index>=list->len){return 1;}else{return 0;}}void search_by_index(sqlist *list, int index)
{if(NULL==list||index_out_of_range(list, index)||empty_sqlist(list)){printf("list is NULL or index out of range");return;}data_type element = list->data[index];printf("found element:%d\n", element);}int update(sqlist *list, int index, data_type element)
{if(NULL==list||empty_sqlist(list)||index_out_of_range(list, index)){printf("list is NULL or empty or index error\n");return -1;}list->data[index] = element;return 0;}int delete_by_index(sqlist *list, int index)
{if(NULL==list || empty_sqlist(list)||index_out_of_range(list, index)){printf("list is NULL or index error\n");return -1;}for(int i=index; i<list->len-1; i++){list->data[i] = list->data[i+1];}list->len--;return 0;
}int rm_duplicate(sqlist *list)
{if(NULL==list || empty_sqlist(list)){printf("list is NULL or empty\n");return -1;}}int search_by_element(sqlist *list, data_type element)
{if(NULL==list || empty_sqlist(list)){printf("list is NULL or empty\n");return -1;}for(int i=0; i<list->len; i++){if(element==list->data[i]){return i;}}return -1;
}int update_by_element(sqlist *list, data_type key, data_type element )
{int found=-1;if(NULL==list || empty_sqlist(list)){printf("list is NULL or empty\n");return found;}for(int i=0; i<list->len; i++){if(key==list->data[i]){list->data[i] = element;found=i;}}return found;
}
please input n;5
please input 1 element:
1
please input 2 element:
2
please input 3 element:
3
please input 4 element:
4
please input 5 element:
5
---output inputed list---1	2	3	4	5	
---update by element---
please input key for updating:3
please input  element for updating:7
element 3 has been updated to 7 at pos 2
1	2	7	4	5	

3. 顺序表去重

//main.c#include "head.h"
int main(int argc, const char *argv[])
{sqlist *list=create_space();// printf("&list=%p\n", list);int n;int index;data_type element, key;printf("please input n;");scanf("%d", &n);for(int i=0; i<n; i++){printf("please input %d element:\n", i+1);scanf("%d", &element);int flag = append(list, element);//printf("main-->flag=%d\n", flag);if(flag==-1){puts("list full or error\n");break;}}puts("---output inputed list---\n");//printf("output inputed list\n");	output(list);putchar(10);/*puts("------");delete_tail(list);printf("the last element has been deleted\n");puts("------");delete_tail(list);printf("the last element has been deleted\n");puts("------");printf("output list after delete\n");printf("list len=%d\n", list->len);output(list);puts("------");search_by_index(list, 1);puts("------");update(list, 1, 99);printf("element 1 has been updated\n");printf("list len=%d\n", list->len);output(list);puts("------");insert(list, 1, 100);printf("postion 1 insrerted an element\n");printf("list len=%d\n", list->len);output(list);puts("---delete by index---");printf("please input index for deleting:");scanf("%d", &index);delete_by_index(list, index);printf("postion %d element has been deleted\n", index);output(list);puts("---update by element---");printf("please input key for updating:");scanf("%d", &key);printf("please input  element for updating:");scanf("%d", &element);int ret = update_by_element(list, key, element);if(ret==-1){printf("key %d is not found or other error\n", key );}else{printf("element %d has been updated to %d at pos %d\n",key, element, ret );}output(list); puts("---delete by element---");printf("please input element to delete:");scanf("%d", &element);int ret = delete_by_element(list, element);if(ret==-1){printf("element %d is not found or other error\n", element );}else{printf("element %d has been deleted\n", element);}output(list);
*/puts("---remove duplicate element---\n");puts("> list before remove duplicate:\n");output(list);int ret = rm_duplicate(list);if(ret==-1){printf("element %d is not found or other error\n", element );}else{puts("> list after remove duplicate:\n");output(list);}return 0;
}
//head.h#ifndef __HEAD_H__
#define __HEAD_H__#include <string.h>
#include <stdlib.h>
#include <stdio.h>//顺序表结构体
#define MAXSIZE 20typedef int data_type;typedef struct
{//数据元素data_type data[MAXSIZE];//顺序表长度int len;}sqlist; // SQLIST --> sqlistsqlist *create_space();
int full_sqlist(sqlist*list);
int append(sqlist *list, data_type element);
int delete_tail(sqlist *list);
void output(sqlist *list);
int empty_sqlist(sqlist *list);
int insert(sqlist *list, int index, data_type element);
void search_by_index(sqlist *list, int index);
int index_out_of_range(sqlist *list, int index);
int update(sqlist *list, int index, data_type element);
int delete_by_index(sqlist *list, int index);
int search_by_element(sqlist *list, data_type element);
int update_by_element(sqlist *list, data_type key, data_type element );
int delete_by_element(sqlist *list, data_type element );
int rm_duplicate(sqlist *list);#endif
//test.c#include "head.h"sqlist *create_space()
{sqlist *list = (sqlist*)malloc(sizeof(sqlist));if(NULL==list){puts("error");return NULL;}list->len=0; //顺序表初始化长度清0//数据清0memset(list->data, 0, sizeof(list->data));return list;
}int full_sqlist(sqlist*list)
{int flag = list->len==MAXSIZE;//printf("full_list-->flag=%d\n", flag);return flag;
}int empty_sqlist(sqlist *list)
{if(list->len==0){return 1;}else{return 0;}}int append(sqlist *list, data_type element)
{// printf("list=%p\n", list);   if(NULL==list || full_sqlist(list)){   return -1; }   list->data[list->len++]=element;return 0;//  }     void output(sqlist *list)
{if(NULL==list||empty_sqlist(list)){printf("list is NULL\n");return;}for(int i=0; i<list->len; i++){printf("%d\t", list->data[i]);}putchar(10);}int delete_tail(sqlist *list)
{	if(NULL==list||empty_sqlist(list)){printf("list is NULL\n");return -1;}list->len--;//不可以释放空间return 0;}int insert(sqlist *list, int index, data_type element)
{if(NULL==list || full_sqlist(list)||index>list->len||index<0 ){printf("list is NULL or index error\n");return -1;}for(int i=list->len-1; i>=index; i--){list->data[i+1] = list->data[i];}list->data[index]=element;list->len++;return 0;}int index_out_of_range(sqlist *list, int index)
{if(NULL==list||empty_sqlist(list)){printf("list is NULL or empty!");return -1;}if(index<0||index>=list->len){return 1;}else{return 0;}}void search_by_index(sqlist *list, int index)
{if(NULL==list||index_out_of_range(list, index)||empty_sqlist(list)){printf("list is NULL or index out of range");return;}data_type element = list->data[index];printf("found element:%d\n", element);}int update(sqlist *list, int index, data_type element)
{if(NULL==list||empty_sqlist(list)||index_out_of_range(list, index)){printf("list is NULL or empty or index error\n");return -1;}list->data[index] = element;return 0;}int delete_by_index(sqlist *list, int index)
{if(NULL==list || empty_sqlist(list)||index_out_of_range(list, index)){printf("list is NULL or index error\n");return -1;}for(int i=index; i<list->len-1; i++){list->data[i] = list->data[i+1];}list->len--;return 0;
}int rm_duplicate(sqlist *list)
{if(NULL==list || empty_sqlist(list)){printf("list is NULL or empty\n");return -1;}for(int i=0; i<list->len-1; i++){int cur=i;for(int j=i+1; j<list->len; j++){if(list->data[cur]==list->data[j]){printf("list->len=%d, i=%d, j=%d\n", list->len, i, j);delete_by_index(list, j);j--;}}}return 0;}int search_by_element(sqlist *list, data_type element)
{if(NULL==list || empty_sqlist(list)){printf("list is NULL or empty\n");return -1;}for(int i=0; i<list->len; i++){if(element==list->data[i]){return i;}}return -1;
}int update_by_element(sqlist *list, data_type key, data_type element )
{int found=-1;if(NULL==list || empty_sqlist(list)){printf("list is NULL or empty\n");return found;}for(int i=0; i<list->len; i++){if(key==list->data[i]){list->data[i] = element;found=i;}}return found;
}int delete_by_element(sqlist *list, data_type element )
{int flag=-1;if(NULL==list || empty_sqlist(list)){printf("list is NULL or empty\n");return flag;}int idx=search_by_element(list, element);if(idx==-1){return -1;}int ret=delete_by_index(list, idx);return ret;}

4. 顺序表有序合并

//main.c#include "head.h"
int main(int argc, const char *argv[])
{sqlist *list=create_space();// printf("&list=%p\n", list);int n;int index;data_type element, key;/*printf("please input n;");scanf("%d", &n);for(int i=0; i<n; i++){printf("please input %d element:\n", i+1);scanf("%d", &element);int flag = append(list, element);//printf("main-->flag=%d\n", flag);if(flag==-1){puts("list full or error\n");break;}}puts("---output inputed list---\n");//printf("output inputed list\n");	output(list);putchar(10);puts("------");delete_tail(list);printf("the last element has been deleted\n");puts("------");delete_tail(list);printf("the last element has been deleted\n");puts("------");printf("output list after delete\n");printf("list len=%d\n", list->len);output(list);puts("------");search_by_index(list, 1);puts("------");update(list, 1, 99);printf("element 1 has been updated\n");printf("list len=%d\n", list->len);output(list);puts("------");insert(list, 1, 100);printf("postion 1 insrerted an element\n");printf("list len=%d\n", list->len);output(list);puts("---delete by index---");printf("please input index for deleting:");scanf("%d", &index);delete_by_index(list, index);printf("postion %d element has been deleted\n", index);output(list);puts("---update by element---");printf("please input key for updating:");scanf("%d", &key);printf("please input  element for updating:");scanf("%d", &element);int ret = update_by_element(list, key, element);if(ret==-1){printf("key %d is not found or other error\n", key );}else{printf("element %d has been updated to %d at pos %d\n",key, element, ret );}output(list); puts("---delete by element---");printf("please input element to delete:");scanf("%d", &element);int ret = delete_by_element(list, element);if(ret==-1){printf("element %d is not found or other error\n", element );}else{printf("element %d has been deleted\n", element);}output(list);puts("---remove duplicate element---\n");puts("> list before remove duplicate:\n");output(list);int ret = rm_duplicate(list);if(ret==-1){printf("element %d is not found or other error\n", element );}else{puts("> list after remove duplicate:\n");output(list);}
*/puts("---combine 2 lists---\n");sqlist *la=create_space();sqlist *lb=create_space();sqlist *lc=create_space();append(la, 11);append(la, 11);append(la, 17);append(la, 24);append(la, 45);append(lb, 13);append(lb, 16);append(lb, 16);append(lb, 36);append(lb, 45);append(lb, 62);puts(">list la:\n");output(la);puts(">list lb:\n");output(lb);combine(la, lb, lc);puts(">list lc after combine:\n");output(lc);return 0;
}

//head.h#ifndef __HEAD_H__
#define __HEAD_H__#include <string.h>
#include <stdlib.h>
#include <stdio.h>//顺序表结构体
#define MAXSIZE 30typedef int data_type;typedef struct
{//数据元素data_type data[MAXSIZE];//顺序表长度int len;}sqlist; // SQLIST --> sqlistsqlist *create_space();
int full_sqlist(sqlist*list);
int append(sqlist *list, data_type element);
int delete_tail(sqlist *list);
void output(sqlist *list);
int empty_sqlist(sqlist *list);
int insert(sqlist *list, int index, data_type element);
void search_by_index(sqlist *list, int index);
int index_out_of_range(sqlist *list, int index);
int update(sqlist *list, int index, data_type element);
int delete_by_index(sqlist *list, int index);
int search_by_element(sqlist *list, data_type element);
int update_by_element(sqlist *list, data_type key, data_type element );
int delete_by_element(sqlist *list, data_type element );
int rm_duplicate(sqlist *list);
void combine(sqlist *la,sqlist*lb,sqlist*lc);#endif

//test.c#include "head.h"sqlist *create_space()
{sqlist *list = (sqlist*)malloc(sizeof(sqlist));if(NULL==list){puts("error");return NULL;}list->len=0; //顺序表初始化长度清0//数据清0memset(list->data, 0, sizeof(list->data));return list;
}int full_sqlist(sqlist*list)
{int flag = list->len==MAXSIZE;//printf("full_list-->flag=%d\n", flag);return flag;
}int empty_sqlist(sqlist *list)
{if(list->len==0){return 1;}else{return 0;}}int append(sqlist *list, data_type element)
{// printf("list=%p\n", list);   if(NULL==list || full_sqlist(list)){   return -1; }   list->data[list->len++]=element;return 0;//  }     void output(sqlist *list)
{if(NULL==list||empty_sqlist(list)){printf("list is NULL\n");return;}for(int i=0; i<list->len; i++){printf("%d\t", list->data[i]);}putchar(10);}int delete_tail(sqlist *list)
{	if(NULL==list||empty_sqlist(list)){printf("list is NULL\n");return -1;}list->len--;//不可以释放空间return 0;}int insert(sqlist *list, int index, data_type element)
{if(NULL==list || full_sqlist(list)||index>list->len||index<0 ){printf("list is NULL or index error\n");return -1;}for(int i=list->len-1; i>=index; i--){list->data[i+1] = list->data[i];}list->data[index]=element;list->len++;return 0;}int index_out_of_range(sqlist *list, int index)
{if(NULL==list||empty_sqlist(list)){printf("list is NULL or empty!");return -1;}if(index<0||index>=list->len){return 1;}else{return 0;}}void search_by_index(sqlist *list, int index)
{if(NULL==list||index_out_of_range(list, index)||empty_sqlist(list)){printf("list is NULL or index out of range");return;}data_type element = list->data[index];printf("found element:%d\n", element);}int update(sqlist *list, int index, data_type element)
{if(NULL==list||empty_sqlist(list)||index_out_of_range(list, index)){printf("list is NULL or empty or index error\n");return -1;}list->data[index] = element;return 0;}int delete_by_index(sqlist *list, int index)
{if(NULL==list || empty_sqlist(list)||index_out_of_range(list, index)){printf("list is NULL or index error\n");return -1;}for(int i=index; i<list->len-1; i++){list->data[i] = list->data[i+1];}list->len--;return 0;
}int rm_duplicate(sqlist *list)
{if(NULL==list || empty_sqlist(list)){printf("list is NULL or empty\n");return -1;}for(int i=0; i<list->len-1; i++){int cur=i;for(int j=i+1; j<list->len; j++){if(list->data[cur]==list->data[j]){printf("list->len=%d, i=%d, j=%d\n", list->len, i, j);delete_by_index(list, j);j--;}}}return 0;}int search_by_element(sqlist *list, data_type element)
{if(NULL==list || empty_sqlist(list)){printf("list is NULL or empty\n");return -1;}for(int i=0; i<list->len; i++){if(element==list->data[i]){return i;}}return -1;
}int update_by_element(sqlist *list, data_type key, data_type element )
{int found=-1;if(NULL==list || empty_sqlist(list)){printf("list is NULL or empty\n");return found;}for(int i=0; i<list->len; i++){if(key==list->data[i]){list->data[i] = element;found=i;}}return found;
}int delete_by_element(sqlist *list, data_type element )
{int flag=-1;if(NULL==list || empty_sqlist(list)){printf("list is NULL or empty\n");return flag;}int idx=search_by_element(list, element);if(idx==-1){return -1;}int ret=delete_by_index(list, idx);return ret;}void combine(sqlist *la,sqlist*lb,sqlist*lc)
{int p=0;int q=0;while(p<la->len && q<lb->len){if(la->data[p] <=lb->data[q]){lc->data[lc->len++]=la->data[p++];}else{lc->data[lc->len++]=lb->data[q++];}}//把la剩余元素存到lcwhile(p<la->len){lc->data[lc->len++]=la->data[p++];}//把lb剩余元素存到lcwhile(q<lb->len){lc->data[lc->len++]=lb->data[q++];}
}

5 顺序表释放空间

//main.c#include "head.h"
int main(int argc, const char *argv[])
{sqlist *list=create_space();// printf("&list=%p\n", list);int n;int index;data_type element, key;printf("please input n;");scanf("%d", &n);for(int i=0; i<n; i++){printf("please input %d element:\n", i+1);scanf("%d", &element);int flag = append(list, element);//printf("main-->flag=%d\n", flag);if(flag==-1){puts("list full or error\n");break;}}puts("---output inputed list---\n");//printf("output inputed list\n");	output(list);putchar(10);/*puts("------");delete_tail(list);printf("the last element has been deleted\n");puts("------");delete_tail(list);printf("the last element has been deleted\n");puts("------");printf("output list after delete\n");printf("list len=%d\n", list->len);output(list);puts("------");search_by_index(list, 1);puts("------");update(list, 1, 99);printf("element 1 has been updated\n");printf("list len=%d\n", list->len);output(list);puts("------");insert(list, 1, 100);printf("postion 1 insrerted an element\n");printf("list len=%d\n", list->len);output(list);puts("---delete by index---");printf("please input index for deleting:");scanf("%d", &index);delete_by_index(list, index);printf("postion %d element has been deleted\n", index);output(list);puts("---update by element---");printf("please input key for updating:");scanf("%d", &key);printf("please input  element for updating:");scanf("%d", &element);int ret = update_by_element(list, key, element);if(ret==-1){printf("key %d is not found or other error\n", key );}else{printf("element %d has been updated to %d at pos %d\n",key, element, ret );}output(list); puts("---delete by element---");printf("please input element to delete:");scanf("%d", &element);int ret = delete_by_element(list, element);if(ret==-1){printf("element %d is not found or other error\n", element );}else{printf("element %d has been deleted\n", element);}output(list);puts("---remove duplicate element---\n");puts("> list before remove duplicate:\n");output(list);int ret = rm_duplicate(list);if(ret==-1){printf("element %d is not found or other error\n", element );}else{puts("> list after remove duplicate:\n");output(list);}puts("---combine 2 lists---\n");sqlist *la=create_space();sqlist *lb=create_space();sqlist *lc=create_space();append(la, 11);append(la, 11);append(la, 17);append(la, 24);append(la, 45);append(lb, 13);append(lb, 16);append(lb, 16);append(lb, 36);append(lb, 45);append(lb, 62);puts(">list la:\n");output(la);puts(">list lb:\n");output(lb);combine(la, lb, lc);puts(">list lc after combine:\n");output(lc);*/puts("---free list space---\n");sqlist *ret = free_list(list);printf("list=%p\n", ret );puts("> list space has been released\n");return 0;
}

//head.h#ifndef __HEAD_H__
#define __HEAD_H__#include <string.h>
#include <stdlib.h>
#include <stdio.h>//顺序表结构体
#define MAXSIZE 30typedef int data_type;typedef struct
{//数据元素data_type data[MAXSIZE];//顺序表长度int len;}sqlist; // SQLIST --> sqlistsqlist *create_space();
int full_sqlist(sqlist*list);
int append(sqlist *list, data_type element);
int delete_tail(sqlist *list);
void output(sqlist *list);
int empty_sqlist(sqlist *list);
int insert(sqlist *list, int index, data_type element);
void search_by_index(sqlist *list, int index);
int index_out_of_range(sqlist *list, int index);
int update(sqlist *list, int index, data_type element);
int delete_by_index(sqlist *list, int index);
int search_by_element(sqlist *list, data_type element);
int update_by_element(sqlist *list, data_type key, data_type element );
int delete_by_element(sqlist *list, data_type element );
int rm_duplicate(sqlist *list);
void combine(sqlist *la,sqlist*lb,sqlist*lc);
sqlist *free_list(sqlist *list);#endif

//test.c#include "head.h"sqlist *create_space()
{sqlist *list = (sqlist*)malloc(sizeof(sqlist));if(NULL==list){puts("error");return NULL;}list->len=0; //顺序表初始化长度清0//数据清0memset(list->data, 0, sizeof(list->data));return list;
}int full_sqlist(sqlist*list)
{int flag = list->len==MAXSIZE;//printf("full_list-->flag=%d\n", flag);return flag;
}int empty_sqlist(sqlist *list)
{if(list->len==0){return 1;}else{return 0;}}int append(sqlist *list, data_type element)
{// printf("list=%p\n", list);   if(NULL==list || full_sqlist(list)){   return -1; }   list->data[list->len++]=element;return 0;//  }     void output(sqlist *list)
{if(NULL==list||empty_sqlist(list)){printf("list is NULL\n");return;}for(int i=0; i<list->len; i++){printf("%d\t", list->data[i]);}putchar(10);}int delete_tail(sqlist *list)
{	if(NULL==list||empty_sqlist(list)){printf("list is NULL\n");return -1;}list->len--;//不可以释放空间return 0;}int insert(sqlist *list, int index, data_type element)
{if(NULL==list || full_sqlist(list)||index>list->len||index<0 ){printf("list is NULL or index error\n");return -1;}for(int i=list->len-1; i>=index; i--){list->data[i+1] = list->data[i];}list->data[index]=element;list->len++;return 0;}int index_out_of_range(sqlist *list, int index)
{if(NULL==list||empty_sqlist(list)){printf("list is NULL or empty!");return -1;}if(index<0||index>=list->len){return 1;}else{return 0;}}void search_by_index(sqlist *list, int index)
{if(NULL==list||index_out_of_range(list, index)||empty_sqlist(list)){printf("list is NULL or index out of range");return;}data_type element = list->data[index];printf("found element:%d\n", element);}int update(sqlist *list, int index, data_type element)
{if(NULL==list||empty_sqlist(list)||index_out_of_range(list, index)){printf("list is NULL or empty or index error\n");return -1;}list->data[index] = element;return 0;}int delete_by_index(sqlist *list, int index)
{if(NULL==list || empty_sqlist(list)||index_out_of_range(list, index)){printf("list is NULL or index error\n");return -1;}for(int i=index; i<list->len-1; i++){list->data[i] = list->data[i+1];}list->len--;return 0;
}int rm_duplicate(sqlist *list)
{if(NULL==list || empty_sqlist(list)){printf("list is NULL or empty\n");return -1;}for(int i=0; i<list->len-1; i++){int cur=i;for(int j=i+1; j<list->len; j++){if(list->data[cur]==list->data[j]){printf("list->len=%d, i=%d, j=%d\n", list->len, i, j);delete_by_index(list, j);j--;}}}return 0;}int search_by_element(sqlist *list, data_type element)
{if(NULL==list || empty_sqlist(list)){printf("list is NULL or empty\n");return -1;}for(int i=0; i<list->len; i++){if(element==list->data[i]){return i;}}return -1;
}int update_by_element(sqlist *list, data_type key, data_type element )
{int found=-1;if(NULL==list || empty_sqlist(list)){printf("list is NULL or empty\n");return found;}for(int i=0; i<list->len; i++){if(key==list->data[i]){list->data[i] = element;found=i;}}return found;
}int delete_by_element(sqlist *list, data_type element )
{int flag=-1;if(NULL==list || empty_sqlist(list)){printf("list is NULL or empty\n");return flag;}int idx=search_by_element(list, element);if(idx==-1){return -1;}int ret=delete_by_index(list, idx);return ret;}void combine(sqlist *la,sqlist*lb,sqlist*lc)
{int p=0;int q=0;while(p<la->len && q<lb->len){if(la->data[p] <=lb->data[q]){lc->data[lc->len++]=la->data[p++];}else{lc->data[lc->len++]=lb->data[q++];}}//把la剩余元素存到lcwhile(p<la->len){lc->data[lc->len++]=la->data[p++];}//把lb剩余元素存到lcwhile(q<lb->len){lc->data[lc->len++]=lb->data[q++];}
}sqlist *free_list(sqlist *list)
{	int flag=-1;if(NULL==list || empty_sqlist(list)){printf("list is NULL\n");return NULL;}free(list);list=NULL;return list;}

相关文章:

数据结构 / day03作业

1.顺序表按元素删除 //main.c#include "head.h" int main(int argc, const char *argv[]) {sqlist *listcreate_space();// printf("&list%p\n", list);int n;int index;data_type element, key;printf("please input n;");scanf("%d&…...

异步爬虫提速实践-在Scrapy中使用Aiohttp/Trio

在构建爬虫系统时&#xff0c;提高爬虫速度是一个关键问题。而使用异步爬虫技术可以显著提升爬取效率。在本文中&#xff0c;我将与大家分享如何在Scrapy中利用Aiohttp或Trio库实现异步爬取&#xff0c;以加快爬虫的速度。让我们开始吧&#xff01; 1. 安装所需的库 首先&…...

Python与设计模式--访问者模式

23种计模式之 前言 &#xff08;5&#xff09;单例模式、工厂模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式、(7)代理模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式、&#xff08;11&#xff09;策略模式、责任链模式、命令模式、中介者模…...

为社会做贡献的EasyDarwin 4.0.1发布了,支持视频点播、文件直播、摄像机直播、直播录像、直播回放、录像MP4合成下载

经过几个月的不懈努力和测试&#xff0c;最新的EasyDarwin 4.0版本总算是发布出来了&#xff0c;功能还是老几样&#xff1a;文件点播、视频直播&#xff08;支持各种视频源&#xff09;、直播录像与回放、录像合成MP4下载&#xff0c;稍稍看一下细节&#xff1a; 文件上传与点…...

CG向量和矩阵元素的获取

swizzle swizzle可以获取向量分量值&#xff1b;表现形式是点符号和rgba或xyzw rgba一般用作颜色表示 xyzw一般用于坐标表示分量值可以进行组合 例如&#xff1a;fixed4 test(1,2,3,4) 获取分量值&#xff1a;test.r 获取第一个分量值、test.g、test.xy、test.yx 向量维度转换…...

牛客 算法题 golang语言实现

题目 HJ101 输入整型数组和排序标识&#xff0c;对其元素按照升序或降序进行排序 描述 输入整型数组和排序标识&#xff0c;对其元素按照升序或降序进行排序数据范围&#xff1a; 1 ≤ &#xfffd; ≤ 10001≤n≤1000 &#xff0c;元素大小满足 0 ≤ &#xfffd; &#…...

鸿蒙开发报错:agconnect sdk not initialized. please call initialize()【BUG已解决】

文章目录 项目场景:问题描述原因分析:解决方案:总结:项目场景: 鸿蒙开发报错: agconnect sdk not initialized. please call initialize() 问题描述 报错内容为: 10-25 11:41:01.152 6076-16676 E A0c0d0/JSApp: app Log: 数据查询失败: {“code”:1100001,“messag…...

极智芯 | 解读国产AI算力算能产品矩阵

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文分享一下 解读国产AI算力 华为昇腾产品矩阵。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0aiNxERDq 算能属于自研 TPU 阵营,…...

docker介绍、部署与常用命令

一、docker 介绍 1、容器&#xff08;Container&#xff09;&#xff1a; (1) 概念&#xff1a; 容器是一种用于运行和部署应用程序的技术。它将应用程序及其所有依赖项&#xff08;例如代码、运行时、系统工具、系统库等&#xff09;打包在一个独立的、可移植的运行环境中&…...

windows定时任务命令工具schtasks

1.Schtasks概述 schtasks 是 Windows 操作系统中用于调度任务的命令行工具。它允许你在指定的时间或事件触发时运行程序或脚本。通过 schtasks 命令&#xff0c;你可以创建、修改、查询和删除计划任务。 2.Schtasks常用命令 查看帮助文档 schtasks /? 设定每月1号执行数据…...

多个nginx共享值、缓存问题

背景 目前我在集成登录认证功能&#xff08;cas&#xff09;&#xff0c;使用的架构是nginxlua&#xff0c;由于我们有多个系统&#xff08;全是前端项目&#xff09;&#xff0c;每套系统都采用nginxlua的方式进行部署&#xff08;即每个系统都是一个nginx&#xff09;&#…...

【2023传智杯】第六届传智杯程序设计挑战赛AB组-DEF题解题分析详解【JavaPythonC++解题笔记】

本文仅为【2023传智杯】第六届传智杯程序设计挑战赛-题目解题分析详解的解题个人笔记,个人解题分析记录。 本文包含:第六届传智杯程序设计挑战赛题目、解题思路分析、解题代码、解题代码详解 文章目录 一.前言更新进度记录二.比赛题目(AB俩组)D题题目-abbE题题目 -kotori和…...

Spark---SparkCore(五)

五、Spark Shuffle文件寻址 1、Shuffle文件寻址 1&#xff09;、MapOutputTracker MapOutputTracker是Spark架构中的一个模块&#xff0c;是一个主从架构。管理磁盘小文件的地址。 MapOutputTrackerMaster是主对象&#xff0c;存在于Driver中。MapOutputTrackerWorker是从对…...

k8s中pod的hostport端口突然无法访问故障处理

故障背景&#xff1a; 租户告知生产环境的sftp突然无法访问了&#xff0c;登录环境查看sftp服务运行都是正常的&#xff0c;访问sftp的hostport端口确实不通。 故障处理过程 既然访问不通那就先给服务做个全面检查&#xff0c;看看哪里出了问题&#xff0c;看下sftp日志&#…...

高德开始“跑腿”

在这个万物皆可到家的时代&#xff0c;外卖已经不仅仅只送餐饮了&#xff0c;无论是鲜花、生活用品&#xff0c;亦或是其他急需品&#xff0c;只需要一个订单&#xff0c;就能够通通搞定。而随着消费者需求的增加&#xff0c;以即时物流为代表的新业态也顺势而起&#xff0c;并…...

Notion for Mac:打造您的专属多功能办公笔记软件

在如今这个信息爆炸的时代&#xff0c;一款高效、便捷的笔记软件对于办公人士来说已经成为必不可少的工具。Notion for Mac&#xff0c;作为一款多功能办公笔记软件&#xff0c;凭借其简洁优雅的界面、强大的功能以及无缝的云端同步&#xff0c;成为了众多用户的首选。 一、多…...

pip 安装软件出现 [No space left on device]

问题&#xff1a; /home文件下空间满了&#xff0c;安装软件可能会出现这个问题 解决方法&#xff1a; pip install --no-cache-dir 安装包名...

【算法刷题】Day8

文章目录 202. 快乐数解法&#xff1a; 11. 盛最多水的容器解法&#xff1a; 202. 快乐数 原题链接 拿到题&#xff0c;我们先看题干 把一个整数替换为每个位置上的数字平方和&#xff0c;有两种情况&#xff1a; 重复这个过程始终不到 1&#xff08;无限死循环&#xff09;结…...

基于单片机的智能饮水机控制系统(论文+源码)

1. 系统设计 本次智能饮水机控制系统的设计研究一款以STC89C52单片机为核心的智能饮水机控制系统&#xff0c;其主要功能设计如下&#xff1a; 1.该饮水机利用DS18B20数字温度传感器实时采集饮水机内水的温度&#xff0c;其检测温度范围为0-100℃&#xff0c;精度0.1℃&#…...

电脑格式化了怎么恢复原来的数据?您可以这样做

电脑是我们日常生活和工作中不可或缺的工具&#xff0c;然而&#xff0c;在一些情况下我们可能需要进行电脑格式化&#xff0c;比如为了清理系统垃圾、解决系统故障等。然而&#xff0c;格式化会导致所有数据被删除&#xff0c;给用户带来不便和困扰。本文将介绍电脑格式化了怎…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...