欢迎光临散文网 会员登陆 & 注册

c语言单链表常规操作

2022-11-23 21:01 作者:站在尽头的孩子  | 我要投稿

#include #include #include typedef struct Node { int data; // int length; struct Node*next; }Node; //单链表初始化 Node*inintlist() { Node*list = (Node*)malloc(sizeof(Node)); list->data = 0; list->next = NULL; return list; } //单链表头插入 void headInsert(Node*list,int data) { Node*node = (Node*)malloc(sizeof(Node)); node->data = data; node->next = list->next; list->next = node; list->data++; } //单链表尾插法 void tailInsert(Node*list,int data) { Node*head = list; Node*node = (Node*)malloc(sizeof(Node)); node->data = data; node->next = NULL; list = list->next; while(list->next) { list = list->next; } list->next = node; head->data++; } //单链表制定数据删除 void delereInsert(Node*list,int data) { Node*pre = list; Node*current = list->next; //printf("debuge\n"); while(current) { //printf("debuge\n"); if(current->data==data) { //printf("debuge\n"); pre->next = current->next; free(current); break; } pre = current; current = current->next; //printf("debuge\n"); } list->data--; } //单链表查找数据显示位置 void find(Node*list,int data) { int i = 0; Node*current = list->next; //printf("debuge\n"); { while(current) { //printf("debuge\n"); if(current->data==data) { printf("找到数据:%d\n",data); printf("数据在链表第:%d位置\n",i+1); break; } current = current->next; i++; //printf("debuge\n"); } if(current==NULL) { printf("链表没有要找的数据:%d\n",data); } } } //单链表指定位置插入数据 int insert(Node*list,int data,int pos) { int i; Node*current = list; ////printf("debuge\n"); for(i = 1;inext; } if(current!=NULL) { Node*node = (Node*)malloc(sizeof(Node)); node->data = data; node->next = current->next; current->next = node; list->data++; printf("数据已经插入成功:%d\n",data); } return 0; } //单链表的插入,在链表的第i个位置插入x的元素 //Node*insert(Node*list,int data,int i) //{ // Node*pre;//pre为前驱结点 // pre = list; // int tempi = 0; // for(tempi = 0;tempinext;//查找第i个位置的前驱结点 // if(pre==NULL) // { // printf("插入位置不合法\n"); // return list; // } // } // Node*p;//插入的结点为p // p = (Node*)malloc(sizeof(Node)); // p->data = data; // p->next = pre->next; // pre->next = p; // list->data++; // return list; //} //新建链表方式-反转链表  Node*revert_list(Node*list) { int data; if(NULL==list->next) { return list; } Node*p = list->next; Node*q = NULL; q = p->next; while(q) {   p->next = q->next;//分离q  data = q->data; q = p->next; headInsert(list,data);//将q插入到首元素位置  } return list; } //单链表遍历打印 void printlist(Node*list) { list = list->next; while(list) { printf("%d ",list->data); list = list->next; } printf("\n"); } int main() { Node*list = inintlist(); //headInsert(list,1); //headInsert(list,8); //headInsert(list,2); //tailInsert(list,10); //tailInsert(list,4); //tailInsert(list,5); //tailInsert(list,6); //tailInsert(list,7); printlist(list); printf("删除链表中的:%d\n",1); delereInsert(list,1); printf("删除链表数据在打印链表\n"); printlist(list); printf("要找的数据是:%d\n",10); find(list,10); printf("查找完成打印链表\n"); printlist(list); printf("插入数据:%d\n",10); printf("插入数据位置:%d\n",3); insert(list,10,3); printf("插入操作完成后链表\n"); printlist(list); Node*revert = revert_list(list); printf("反序操作完成后链表\n"); printlist(revert); return 0; }

c语言单链表常规操作的评论 (共 条)

分享到微博请遵守国家法律