用路由器建设网站,营销策略模板,可以做商品砍价的网站,大气环保网站模板要求功能#xff1a; 创建学生信息表 头插法输入学生信息 尾插法输入学生信息输出任意位置范围内的学生信息 头删法删除学生信息尾删法删除学生信息按位置添加学生信息按位置删除学生信息 按位置修改学生信息按位置查找学生信息释放空间 今天有点累#xff0c;懒得写注释了 创建学生信息表 头插法输入学生信息 尾插法输入学生信息输出任意位置范围内的学生信息 头删法删除学生信息尾删法删除学生信息按位置添加学生信息按位置删除学生信息 按位置修改学生信息按位置查找学生信息释放空间 今天有点累懒得写注释了其实思路都差不多就是找到在操作没什么太多区别
创建结构体 节点结构体 len链表长度 data节点数据 next节点后继 typedef struct Node {union {int data;int len;};struct Node* next;
} Node, *PNode; 创建链表
PNode linklist_creat() {PNode p (PNode) malloc(sizeof(Node));if(NULL p){printf(创建失败!\n);return NULL;}p-len 0;p-next NULL;printf(创建成功\n);return p;
}
头插法输入学生信息
int linklist_head_insert(PNode linklist, int num) {if(NULL linklist) return -1;printf(请输入 %d 个数据\n,num);for (int i 0; i num; i) {PNode temp (PNode) malloc(sizeof(Node));scanf(%d,temp-data);//头插temp-next linklist-next;linklist-next temp;//改变长度记录linklist-len;}printf(头插 %d 个元素成功\n,num);return 1;
}
尾插法输入学生信息
int linklist_tail_insert(PNode linklist, int num) {if(NULL linklist) return -1;printf(请输入 %d 个数据\n,num);PNode p linklist;while (p-next ! NULL){p p-next;}for (int i 0; i num; i) {PNode temp (PNode) malloc(sizeof(Node));scanf(%d,temp-data);temp-next NULL;p-next temp;p p-next;linklist-len;}printf(尾插 %d 个元素成功\n,num);return 1;
}
输出任意位置范围内的学生信息
int linklist_output(PNode linklist, int out_begin, int out_end) {if(NULL linklist) return -1;if(linklist-len 0){printf(链表为空\n);return 0;}if(out_begin out_end){printf(输入顺序出错\n);return 0;}if(out_begin 1 || out_end linklist-len){printf(输入不在链表范围内);return 0;}PNode temp linklist-next;int count 1;while (count out_begin){temp temp-next;count;}for (int i out_begin; i out_end; i) {printf(%d ,temp-data);temp temp-next;}printf(\n);printf(输出 %d 到 %d 个元素完成\n,out_begin,out_end);return 1;
} 头删法删除学生信息
int linklist_head_delete(PNode linklist, int num) {if(NULL linklist) return -1;if(linklist-len 0){printf(链表为空\n);return 0;}if(num linklist-len){printf(输入长度超过链表长度\n);return 0;}for (int i 0; i num; i) {//创建删除指针PNode temp linklist-next;//断开链接linklist-next temp-next;//释放删除节点temp-next NULL;free(temp);temp NULL;linklist-len--;}printf(头删 %d 个元素完成\n,num);return 1;
}
尾删法删除学生信息
int linklist_tail_delete(PNode linklist, int num) {if(NULL linklist) return -1;if(linklist-len 0){printf(链表为空\n);return 0;}if(num linklist-len || num 1){printf(输入长度超过链表长度\n);return 0;}for (int i 0; i num; i) {PNode temp linklist;while (temp-next-next ! NULL){temp temp-next;}free(temp-next);temp-next NULL;linklist-len--;}printf(尾删 %d 个数据成功!\n,num);return 1;
}
按位置插入学生信息
int linklist_set_insert(PNode linklist, int set) {if(NULL linklist) return -1;if(linklist-len 0){printf(链表为空\n);return 0;}if(set linklist-len 1 || set 1){printf(输入长度超过链表长度\n);return 0;}//找到set位置前面那个位置PNode temp linklist;int count 0;while (count set){temp temp-next;count;}PNode new_node (PNode) malloc(sizeof(Node));printf(请输入要插入的值);scanf(%d,new_node-data);new_node-next temp-next;temp-next new_node;linklist-len;printf(插入新数据到 %d 位置成功\n,set);return 1;
}
按位置删除学生信息
int linklist_set_delete(PNode linklist, int set) {if(NULL linklist) return -1;if(linklist-len 0){printf(链表为空\n);return 0;}if(set linklist-len || set 1){printf(输入长度超过链表长度\n);return 0;}//找到set位置前面那个位置PNode temp linklist;int count 1;while (count set){temp temp-next;count;}PNode p temp-next;temp-next p-next;free(p);linklist-len--;printf(删除 %d 位置的数据成功\n,set);return 1;
}
按位置修改学生信息
int linklist_set_change(PNode linklist, int set) {if(NULL linklist) return -1;if(linklist-len 0){printf(链表为空\n);return 0;}if(set linklist-len || set 1){printf(输入长度超过链表长度\n);return 0;}//找到set位置PNode temp linklist-next;int count 1;while (count set){temp temp-next;count;}printf(当前值为 %d\n,temp-data);printf(请输入要修改的值);scanf(%d,temp-data);printf(修改成功\n);return 1;
}
按位置查找学生信息
释放空间
int linklist_free(PNode linklist) {if(NULL linklist) return -1;if(linklist-len 0){printf(链表为空\n);return 0;}while (linklist-next ! NULL){PNode p linklist-next;linklist-next p-next;p-next NULL;free(p);p NULL;}printf(释放成功!\n);return 1;
}
代码总和
#include stdio.h
#include malloc.h//节点结构体len链表长度data节点数据next节点后继
typedef struct Node {union {int data;int len;};struct Node* next;
} Node, *PNode;PNode linklist_creat();int linklist_free(PNode linklist);int linklist_head_insert(PNode linklist, int num);int linklist_tail_insert(PNode linklist, int num);int linklist_output(PNode linklist, int out_begin, int out_end);int linklist_head_delete(PNode linklist, int num);int linklist_tail_delete(PNode linklist, int num);int linklist_set_insert(PNode linklist, int set);int linklist_set_delete(PNode linklist, int set);int linklist_set_change(PNode linklist, int set);int linklist_set_find(PNode linklist, int set);int main(){PNode linklist;int chose;for (;;) {printf(请输入你的选择);scanf(%d,chose);if(chose 0){printf(当前链表长度为%-5d\n,linklist-len);} else if(chose 1){//创建头节点linklist linklist_creat();} else if(chose 2){//头插int num;printf(请输入要头插节点的数量);scanf(%d,num);linklist_head_insert(linklist,num);} else if(chose 3){//尾插int num;printf(请输入要尾插节点的数量);scanf(%d,num);linklist_tail_insert(linklist,num);} else if(chose 4){//遍历链表int out_begin,out_end;printf(当前链表长度为%-3d\n,linklist-len);printf(请输入要遍历的起始位置和结束位置);scanf(%d %d,out_begin,out_end);linklist_output(linklist,out_begin,out_end);} else if(chose 5){//头删int num;printf(请输入要头删的数量);scanf(%d,num);linklist_head_delete(linklist,num);} else if(chose 6){//尾删int num;printf(请输入要尾删的数量);scanf(%d,num);linklist_tail_delete(linklist,num);}if(chose 7){//任意位置插入int set;printf(请输入要插入的位置);scanf(%d,set);linklist_set_insert(linklist,set);}if(chose 8){//任意位置删除int set;printf(请输入要删除的位置);scanf(%d,set);linklist_set_delete(linklist,set);}if(chose 9){//任意位置修改int set;printf(请输入要修改的位置);scanf(%d,set);linklist_set_change(linklist,set);}if(chose 10){//任意位置查找int set;printf(请输入要查找的位置);scanf(%d,set);linklist_set_find(linklist,set);}else if(chose -1){//释放内存指针指空linklist_free(linklist);free(linklist);linklist NULL;break;}printf(\n);}return 0;
}int linklist_set_find(PNode linklist, int set) {if(NULL linklist) return -1;if(linklist-len 0){printf(链表为空\n);return 0;}if(set linklist-len || set 1){printf(输入长度超过链表长度\n);return 0;}//找到set位置PNode temp linklist-next;int count 1;while (count set){temp temp-next;count;}printf(第 %d 个数据为 %d\n,set,temp-data);return 1;
}int linklist_set_change(PNode linklist, int set) {if(NULL linklist) return -1;if(linklist-len 0){printf(链表为空\n);return 0;}if(set linklist-len || set 1){printf(输入长度超过链表长度\n);return 0;}//找到set位置PNode temp linklist-next;int count 1;while (count set){temp temp-next;count;}printf(当前值为 %d\n,temp-data);printf(请输入要修改的值);scanf(%d,temp-data);printf(修改成功\n);return 1;
}int linklist_set_delete(PNode linklist, int set) {if(NULL linklist) return -1;if(linklist-len 0){printf(链表为空\n);return 0;}if(set linklist-len || set 1){printf(输入长度超过链表长度\n);return 0;}//找到set位置前面那个位置PNode temp linklist;int count 1;while (count set){temp temp-next;count;}PNode p temp-next;temp-next p-next;free(p);linklist-len--;printf(删除 %d 位置的数据成功\n,set);return 1;
}int linklist_set_insert(PNode linklist, int set) {if(NULL linklist) return -1;if(linklist-len 0){printf(链表为空\n);return 0;}if(set linklist-len 1 || set 1){printf(输入长度超过链表长度\n);return 0;}//找到set位置前面那个位置PNode temp linklist;int count 0;while (count set){temp temp-next;count;}PNode new_node (PNode) malloc(sizeof(Node));printf(请输入要插入的值);scanf(%d,new_node-data);new_node-next temp-next;temp-next new_node;linklist-len;printf(插入新数据到 %d 位置成功\n,set);return 1;
}int linklist_tail_delete(PNode linklist, int num) {if(NULL linklist) return -1;if(linklist-len 0){printf(链表为空\n);return 0;}if(num linklist-len || num 1){printf(输入长度超过链表长度\n);return 0;}for (int i 0; i num; i) {PNode temp linklist;while (temp-next-next ! NULL){temp temp-next;}free(temp-next);temp-next NULL;linklist-len--;}printf(尾删 %d 个数据成功!\n,num);return 1;
}int linklist_head_delete(PNode linklist, int num) {if(NULL linklist) return -1;if(linklist-len 0){printf(链表为空\n);return 0;}if(num linklist-len){printf(输入长度超过链表长度\n);return 0;}for (int i 0; i num; i) {//创建删除指针PNode temp linklist-next;//断开链接linklist-next temp-next;//释放删除节点temp-next NULL;free(temp);temp NULL;linklist-len--;}printf(头删 %d 个元素完成\n,num);return 1;
}int linklist_output(PNode linklist, int out_begin, int out_end) {if(NULL linklist) return -1;if(linklist-len 0){printf(链表为空\n);return 0;}if(out_begin out_end){printf(输入顺序出错\n);return 0;}if(out_begin 1 || out_end linklist-len){printf(输入不在链表范围内);return 0;}PNode temp linklist-next;int count 1;while (count out_begin){temp temp-next;count;}for (int i out_begin; i out_end; i) {printf(%d ,temp-data);temp temp-next;}printf(\n);printf(输出 %d 到 %d 个元素完成\n,out_begin,out_end);return 1;
}int linklist_tail_insert(PNode linklist, int num) {if(NULL linklist) return -1;printf(请输入 %d 个数据\n,num);PNode p linklist;while (p-next ! NULL){p p-next;}for (int i 0; i num; i) {PNode temp (PNode) malloc(sizeof(Node));scanf(%d,temp-data);temp-next NULL;p-next temp;p p-next;linklist-len;}printf(尾插 %d 个元素成功\n,num);return 1;
}int linklist_head_insert(PNode linklist, int num) {if(NULL linklist) return -1;printf(请输入 %d 个数据\n,num);for (int i 0; i num; i) {PNode temp (PNode) malloc(sizeof(Node));scanf(%d,temp-data);//头插temp-next linklist-next;linklist-next temp;//改变长度记录linklist-len;}printf(头插 %d 个元素成功\n,num);return 1;
}int linklist_free(PNode linklist) {if(NULL linklist) return -1;if(linklist-len 0){printf(链表为空\n);return 0;}while (linklist-next ! NULL){PNode p linklist-next;linklist-next p-next;p-next NULL;free(p);p NULL;}printf(释放成功!\n);return 1;
}PNode linklist_creat() {PNode p (PNode) malloc(sizeof(Node));if(NULL p){printf(创建失败!\n);return NULL;}p-len 0;p-next NULL;printf(创建成功\n);return p;
}