首页 > 代码库 > C语言:链表

C语言:链表

#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 = http://www.mamicode.com/q->data;>*/}/*把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 =http://www.mamicode.com/ 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 =http://www.mamicode.com/ data; rear->next = p; rear = p; length++; //链表长度加1 scanf("%d",&data); } rear->next = NULL; L->data =http://www.mamicode.com/ 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;}

 

C语言:链表