#include <stdio.h> #include <stdlib.h> struct LNode{ int data; struct LNode *next; }; void create(struct LNode *L);//创建链表 void clearlist(struct LNode *L);//清除链表 void print(struct LNode *L);//打印链表 void search(struct LNode *L,int loc);//查找 void deldata(struct LNode *L,int loc);//删除 void insert (struct LNode *L,int loc,int data);//插入 void sort_bubble(struct LNode *L); void sort_insert(struct LNode *L); int main() { int loc; int data; struct LNode *linklist;//定义一个头指针(链表的描述) create(linklist); print(linklist); // clearlist(linklist); // print(linklist); /* printf("查找第几个节点:"); scanf("%d",&loc); search(linklist,loc); printf("删除第几个节点:"); scanf("%d",&loc); deldata(linklist,loc); print(linklist); printf("插入到第几个节点以及值:"); scanf("%d %d",&loc,&data); insert(linklist,loc,data); print(linklist); */ //sort_bubble(linklist); // printf("排序后:\n"); // print(linklist); } /*直接插入排序*/ void sort_insert(struct LNode *L){ struct LNode *p,*temp; p = L->next; while(p){ if(p->next->data < p->data){ temp = p->next; } } } /*冒泡排序 不是标准的冒泡排序,因为他不是相连交换 一次p循环确定一个最小值 */ void sort_bubble(struct LNode *L){ /* p = L->next; q = p->next; while(p){ while(q){ if(p->data >= q->data){ temp = p->data; p->data = q->data; q->data = temp; } q = q->next; } p = p->next; if(p==NULL) return 0; q = p->next; } */ } /*把data插入到loc位置----p定位的是第‘loc-1’个数据节点*/ void insert (struct LNode *L,int loc,int data){ struct LNode *p,*q; int j = 1; p = L; while(p && (j<loc)){ //p定位的是第‘loc-1’个数据节点 p = p->next; j++; } if(!p || (j>loc)){ printf("超出范围\n"); return -1; } q = (struct LNode *)malloc(sizeof(struct LNode)); q->data = data; q->next = p->next;//原来的loc接到q后面 p->next = q; //q接到‘loc-1’后面,变成loc return 0; } /*删除第loc个节点:------p定位的是第‘loc-1’个数据节点*/ void deldata(struct LNode *L,int loc){ struct LNode *p,*q; int j = 1; p = L; //p指向头节点 while(p && (j<loc)){ //p定位的是第‘loc-1’个数据节点 p=p->next; j++; } if(!p || (j>loc)){ printf("查找超出范围\n"); return -1; } q = p->next;//q定位的是第loc个数据节点 p->next = q->next; //loc+1接到loc-1的后面 free(q); //删除loc return 0; } /*查找第loc个节点的值-----p定位的是第‘loc’个数据节点*/ void search(struct LNode *L,int loc){ struct LNode *p; int j=1; p = L->next; //头指针从头结点指向第一个数据节点 while(p && (j<loc)){ p = p->next; j++; } if(!p || (j>loc)){ printf("查找超出范围\n"); return -1; } printf("第%d个节点的值是:%d\n",loc,p->data); } /* 创建链表 头指针指向头节点,头结点的内容为链表的长度 */ void create(struct LNode *L){ struct LNode *rear,*p; int data; int length = 0; rear = L; printf("输入元素的值,并以\"-1\"结束:\n"); scanf("%d",&data); while(data+1){ p = (struct LNode*)malloc(sizeof(struct LNode)); //新建节点 p->data = data; rear->next = p; rear = p; length++; //链表长度加1 scanf("%d",&data); } rear->next = NULL; L->data = length; } /*清除链表的内容*/ void clearlist(struct LNode *L){ struct LNode *p,*q; p = L->next; while(p){ q = p->next; //保存下一个节点 free(p); //删除当前节点 p = q; } L->next = NULL; return 0; } /*打印链表的内容*/ void print(struct LNode *L){ struct LNode *p; printf("链表的内容是 :"); p = L->next;//头指针从头结点指向第一个数据节点 while(p){ printf("%d ",p->data); p = p->next; } printf("链表的长度是 :%d\n",L->data); return 0; }
时间: 2024-11-05 14:55:40