数据结构 / 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℃&#…...
电脑格式化了怎么恢复原来的数据?您可以这样做
电脑是我们日常生活和工作中不可或缺的工具,然而,在一些情况下我们可能需要进行电脑格式化,比如为了清理系统垃圾、解决系统故障等。然而,格式化会导致所有数据被删除,给用户带来不便和困扰。本文将介绍电脑格式化了怎…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的: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主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...
