数据结构 / 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
在构建爬虫系统时,提高爬虫速度是一个关键问题。而使用异步爬虫技术可以显著提升爬取效率。在本文中,我将与大家分享如何在Scrapy中利用Aiohttp或Trio库实现异步爬取,以加快爬虫的速度。让我们开始吧! 1. 安装所需的库 首先&…...
Python与设计模式--访问者模式
23种计模式之 前言 (5)单例模式、工厂模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式、(7)代理模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式、(11)策略模式、责任链模式、命令模式、中介者模…...
为社会做贡献的EasyDarwin 4.0.1发布了,支持视频点播、文件直播、摄像机直播、直播录像、直播回放、录像MP4合成下载
经过几个月的不懈努力和测试,最新的EasyDarwin 4.0版本总算是发布出来了,功能还是老几样:文件点播、视频直播(支持各种视频源)、直播录像与回放、录像合成MP4下载,稍稍看一下细节: 文件上传与点…...
CG向量和矩阵元素的获取
swizzle swizzle可以获取向量分量值;表现形式是点符号和rgba或xyzw rgba一般用作颜色表示 xyzw一般用于坐标表示分量值可以进行组合 例如:fixed4 test(1,2,3,4) 获取分量值:test.r 获取第一个分量值、test.g、test.xy、test.yx 向量维度转换…...
牛客 算法题 golang语言实现
题目 HJ101 输入整型数组和排序标识,对其元素按照升序或降序进行排序 描述 输入整型数组和排序标识,对其元素按照升序或降序进行排序数据范围: 1 ≤ � ≤ 10001≤n≤1000 ,元素大小满足 0 ≤ � &#…...
鸿蒙开发报错: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、容器(Container): (1) 概念: 容器是一种用于运行和部署应用程序的技术。它将应用程序及其所有依赖项(例如代码、运行时、系统工具、系统库等)打包在一个独立的、可移植的运行环境中&…...
windows定时任务命令工具schtasks
1.Schtasks概述 schtasks 是 Windows 操作系统中用于调度任务的命令行工具。它允许你在指定的时间或事件触发时运行程序或脚本。通过 schtasks 命令,你可以创建、修改、查询和删除计划任务。 2.Schtasks常用命令 查看帮助文档 schtasks /? 设定每月1号执行数据…...
多个nginx共享值、缓存问题
背景 目前我在集成登录认证功能(cas),使用的架构是nginxlua,由于我们有多个系统(全是前端项目),每套系统都采用nginxlua的方式进行部署(即每个系统都是一个nginx)&#…...
【2023传智杯】第六届传智杯程序设计挑战赛AB组-DEF题解题分析详解【JavaPythonC++解题笔记】
本文仅为【2023传智杯】第六届传智杯程序设计挑战赛-题目解题分析详解的解题个人笔记,个人解题分析记录。 本文包含:第六届传智杯程序设计挑战赛题目、解题思路分析、解题代码、解题代码详解 文章目录 一.前言更新进度记录二.比赛题目(AB俩组)D题题目-abbE题题目 -kotori和…...
Spark---SparkCore(五)
五、Spark Shuffle文件寻址 1、Shuffle文件寻址 1)、MapOutputTracker MapOutputTracker是Spark架构中的一个模块,是一个主从架构。管理磁盘小文件的地址。 MapOutputTrackerMaster是主对象,存在于Driver中。MapOutputTrackerWorker是从对…...
k8s中pod的hostport端口突然无法访问故障处理
故障背景: 租户告知生产环境的sftp突然无法访问了,登录环境查看sftp服务运行都是正常的,访问sftp的hostport端口确实不通。 故障处理过程 既然访问不通那就先给服务做个全面检查,看看哪里出了问题,看下sftp日志&#…...
高德开始“跑腿”
在这个万物皆可到家的时代,外卖已经不仅仅只送餐饮了,无论是鲜花、生活用品,亦或是其他急需品,只需要一个订单,就能够通通搞定。而随着消费者需求的增加,以即时物流为代表的新业态也顺势而起,并…...
Notion for Mac:打造您的专属多功能办公笔记软件
在如今这个信息爆炸的时代,一款高效、便捷的笔记软件对于办公人士来说已经成为必不可少的工具。Notion for Mac,作为一款多功能办公笔记软件,凭借其简洁优雅的界面、强大的功能以及无缝的云端同步,成为了众多用户的首选。 一、多…...
pip 安装软件出现 [No space left on device]
问题: /home文件下空间满了,安装软件可能会出现这个问题 解决方法: pip install --no-cache-dir 安装包名...
【算法刷题】Day8
文章目录 202. 快乐数解法: 11. 盛最多水的容器解法: 202. 快乐数 原题链接 拿到题,我们先看题干 把一个整数替换为每个位置上的数字平方和,有两种情况: 重复这个过程始终不到 1(无限死循环)结…...
基于单片机的智能饮水机控制系统(论文+源码)
1. 系统设计 本次智能饮水机控制系统的设计研究一款以STC89C52单片机为核心的智能饮水机控制系统,其主要功能设计如下: 1.该饮水机利用DS18B20数字温度传感器实时采集饮水机内水的温度,其检测温度范围为0-100℃,精度0.1℃&#…...
电脑格式化了怎么恢复原来的数据?您可以这样做
电脑是我们日常生活和工作中不可或缺的工具,然而,在一些情况下我们可能需要进行电脑格式化,比如为了清理系统垃圾、解决系统故障等。然而,格式化会导致所有数据被删除,给用户带来不便和困扰。本文将介绍电脑格式化了怎…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
