当前位置: 首页 > 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;给用户带来不便和困扰。本文将介绍电脑格式化了怎…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...