-
思维导图
-
顺序表(按位置插入、按位置删除和去重)
cpp//main.c #include "seq_list.h" int main() { seq_p L = create_seq_list(); insert_head(L,23); insert_head(L,20); insert_head(L,9); insert_head(L,20); insert_head(L,20); insert_head(L,6); insert_pos(L,321,2); insert_pos(L,123,6); out_put(L); putchar(10); del_pos(L,2); out_put(L); putchar(10); del(L); out_put(L); return 0; } //seq_list.c #include "seq_list.h" seq_p create_seq_list() { seq_p L = (seq_p)malloc(sizeof(seq_list)); if(L==NULL) { printf("空间申请失败\n"); return; } L->len = 0; bzero(L,sizeof(L->data)); return L; } int seq_empty(seq_p L) { if(L==NULL) return -1; return L->len==0?1:0; } int seq_full(seq_p L) { if(L==NULL) return -1; return L->len==MAX?1:0; } void out_put(seq_p L) { if(L==NULL) { return; } if(seq_empty(L)) { printf("表为空\n"); return; } for(int i=0;i<L->len;i++) { printf("%d\n",L->data[i]); } } //顺序表头插 void insert_head(seq_p L,datatype data) { if(L==NULL) { printf("入参为空,请检查\n"); return; } if(seq_full(L)==1) { printf("表已满,不能头插插入\n"); return; } for(int i=L->len-1;i>=0;i--) { L->data[i+1] = L->data[i]; } L->data[0]=data; L->len++; } //按位置插入 //从第0个位置开始计数 void insert_pos(seq_p L,datatype value,int pos) { if(L==NULL) { printf("入参为空,请检查\n"); return; } if(seq_full(L)==1) { printf("表已满,不能按位置插入\n"); return; } if(pos>L->len||pos<0) { printf("位置不合理\n"); return; } for(int i=L->len-1;i>=pos;i--) { L->data[i+1]=L->data[i]; } L->data[pos]=value; L->len++; } //按位置删除 void del_pos(seq_p L,int pos) { if(L==NULL) { printf("入参为空,请检查\n"); return; } if(seq_empty(L)) { printf("表为空,无需删除\n"); return; } if(pos>L->len||pos<0) { printf("位置不合理\n"); return; } for(int i=pos;i<L->len-1;i++) { L->data[i]=L->data[i+1]; } L->len--; } //顺序表去重 void del(seq_p L) { if(L==NULL){return;} if(seq_empty(L)){return;} if(L->len==1){printf("只有一个元素\n");return;} for(int i=0;i<L->len;i++) { for(int j=i+1;j<L->len;j++) { if(L->data[i]==L->data[j]) { del_pos(L,j); j--; } } } } //seq_list.h #ifndef __SEQ_LIST_H__ #define __SEQ_LIST_H__ #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 7 typedef int datatype; typedef struct seq_list { datatype data[MAX]; int len; }seq_list,*seq_p; //创建顺序表 seq_p create_seq_list(); //判满 int seq_full(seq_p L); //判空 int seq_empty(seq_p L); //打印顺序表 void out_put(seq_p L); //顺序表头插//顺序表头插 void insert_head(seq_p L,datatype data); //按位置插入 void insert_pos(seq_p L,datatype value,int pos); //按位置删除 void del_pos(seq_p L,int pos); //顺序表去重 void del(seq_p L); #endif
-
链表的尾插和输出
cpp//main.c #include "link_list.h" int main() { link_p H=NULL; H = create_head(); insert_head(H,12); insert_head(H,6); insert_head(H,90); pout(H); insert_tail(H,8); insert_tail(H,7879); pout(H); return 0; } //link_list.c #include "link_list.h" //创建单链表,在堆区申请空间 //实际在创建头结点,因为头结点指向整条链表 link_p create_head() { link_p L= (link_p)malloc(sizeof(link_list)); if(L==NULL) { printf("空间申请失败\n"); return NULL; } L->len=0; //创建时链表中没有元素,长度为0 L->next=NULL; //创建空的单链表,头结点没有指向,置空 return L; } //创建结点 link_p create_node(datatype data) { link_p new=(link_p)malloc(sizeof(link_list)); if(new==NULL) { printf("空间申请失败\n"); return NULL; } new->data=data; return new; } //头插 void insert_head(link_p H,datatype data) { //1\容错判断 if(H==NULL) { printf("入参为空,请检查\n"); return; } //申请新的结点 link_p new = create_node(data); //新结点指向头结点的下一个结点 new->next = H->next; //头结点指向新的结点 H->next = new; H->len++; } //尾插 void insert_tail(link_p H,datatype data) { if(H==NULL) { printf("入参为空,请检查\n"); return; } link_p new = create_node(data); while(H->next!=NULL) { H=H->next; } H->next=new; } //输出 void pout(link_p H) { link_p head=H->next; if (head == NULL) { printf("空link\n"); return; } while (head != NULL) { printf("%d ", head->data); head = head->next; } putchar(10); } //link_list.h #ifndef __LINK_LIST_H__ #define __LINK_LIST_H__ #include <stdio.h> #include <stdlib.h> typedef int datatype; typedef struct link_list { union { int len; datatype data; }; struct link_list *next; }link_list,*link_p; //创建单链表,在堆区申请空间 link_p create_head(); //创建结点 link_p create_node(datatype data); //头插 void insert_head(link_p H,datatype data); //尾插 void insert_tail(link_p H,datatype data); //输出 void pout(link_p H); #endif
数据结构2.22
Sigmadeltpai2024-02-23 13:49
相关推荐
别NULL2 小时前
机试题——疯长的草ZSYP-S4 小时前
Day 15:Spring 框架基础唐叔在学习4 小时前
【唐叔学算法】第21天:超越比较-计数排序、桶排序与基数排序的Java实践及性能剖析ALISHENGYA4 小时前
全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(switch语句)武昌库里写JAVA7 小时前
浅谈怎样系统的准备前端面试S-X-S7 小时前
代码随想录刷题-数组l138494274517 小时前
每日一题(4)kyrie_sakura7 小时前
c++数据结构算法复习基础--13--基数算法XWXnb68 小时前
数据结构:顺序表橘颂TA8 小时前
【C++】数据结构 顺序表的实现(详解)