首页 > 代码库 > 数据结构 链表基础算法
数据结构 链表基础算法
1 #include<stdio.h> 2 #include<malloc.h> 3 #include<stdlib.h> 4 typedef struct node 5 { 6 int data; 7 struct node * pNext; 8 }NODE,* PNODE; 9 //节点定义 10 //函数声明 11 PNODE create_list(); 12 void traverse_list(PNODE); 13 int len_list(PNODE); 14 void sort_list(PNODE); 15 void delete_list(PNODE); 16 void insert_list(PNODE); 17 void update_list(PNODE); 18 //函数声明结束 19 int main(void) 20 { 21 PNODE pHead=create_list(); 22 traverse_list(pHead); 23 sort_list(pHead); 24 delete_list(pHead); 25 insert_list(pHead); 26 update_list(pHead); 27 return 0; 28 } 29 PNODE create_list() 30 { 31 int len,val,i; 32 printf("请输入链表的长度 len="); 33 scanf("%d",&len); 34 PNODE phead=(PNODE)malloc(sizeof(NODE)); 35 if(phead==NULL) 36 { 37 printf("内存分配失败"); 38 exit(-1); 39 } 40 PNODE ptail=phead; 41 ptail->pNext=NULL; 42 for(i=0;i<len;i++) 43 { 44 PNODE pnew=(PNODE)malloc(sizeof(NODE)); 45 if(pnew==NULL) 46 { 47 printf("内存分配失败"); 48 exit(-1); 49 } 50 printf("请输入第%d个节点的值",i+1); 51 scanf("%d",&val); 52 pnew->data=http://www.mamicode.com/val; 53 ptail->pNext=pnew; 54 pnew->pNext=NULL; 55 ptail=pnew; 56 } 57 return phead; 58 } //创建初始化链表 59 void traverse_list(PNODE phead) 60 { 61 PNODE p=phead->pNext; 62 while(p!=NULL) 63 { 64 printf("%d\t",p->data); 65 p=p->pNext; 66 } 67 printf("\n"); 68 } //遍历链表 69 int len_list(PNODE phead) 70 { 71 PNODE p=phead->pNext; 72 int len=0; 73 while(p!=NULL) 74 { 75 p=p->pNext; 76 len++; 77 } 78 return len; 79 } //链表元素个数 80 void sort_list(PNODE phead) 81 { 82 int i=0,j=0,t; 83 int len=len_list(phead); 84 PNODE p,q; 85 for(p=phead->pNext;i<len-1;i++,p=p->pNext) 86 { 87 for(j=i+1,q=p->pNext;j<len;j++,q=q->pNext) 88 { 89 if(p->data<q->data) 90 { 91 t=p->data; 92 p->data=http://www.mamicode.com/q->data; 93 q->data=http://www.mamicode.com/t; 94 } 95 } 96 } 97 printf("排序后\n"); 98 traverse_list(phead); 99 } // 冒泡排序100 101 void delete_list(PNODE phead)102 {103 int i=0,pos;104 PNODE p=phead;105 printf("请输入要删除的值的位置:");106 scanf("%d",&pos);107 while(p->pNext!=NULL&&i<pos-1)108 {109 p=p->pNext;110 i++;111 }112 if(p->pNext==NULL||i>pos-1)113 {114 printf("输入位置有误\n");115 delete_list(phead);116 return;117 }118 PNODE q=p->pNext;119 p->pNext=p->pNext->pNext;120 printf("删除%d成功\n",q->data);121 free(q);122 q=NULL;123 traverse_list(phead);124 } //删除指定节点125 126 void insert_list(PNODE phead)127 {128 int pos,i=0;129 PNODE p=phead;130 printf("请输入要插入的位置:");131 scanf("%d",&pos);132 while(p->pNext!=NULL&&i<pos-1)133 {134 p=p->pNext;135 i++;136 }137 if(p->pNext==NULL||i>pos-1) 138 {139 printf("输入位置有误\n");140 insert_list(phead);141 return;142 }143 PNODE pnew=(PNODE)malloc(sizeof(NODE));144 if(pnew==NULL) 145 {146 printf("内存分配失败");147 exit(-1);148 }149 int data;150 printf("请输入要插入的数值:");151 scanf("%d",&data);152 pnew->data=http://www.mamicode.com/data;153 pnew->pNext=p->pNext;154 p->pNext=pnew;155 traverse_list(phead);156 } //在指定位置插入节点157 158 void update_list(PNODE phead)159 {160 int pos,i=0;161 PNODE p=phead;162 printf("请输入要修改的位置:");163 scanf("%d",&pos);164 while(p->pNext!=NULL&&i<pos-1)165 {166 p=p->pNext;167 i++;168 }169 if(p->pNext==NULL||i>pos-1)170 {171 printf("位置输入有误,请从输入\n");172 update_list(phead);173 return;174 }175 int val;176 printf("请输入修改后的值:");177 scanf("%d",&val);178 printf("修改成功,%d修改为",p->pNext->data);179 p->pNext->data=http://www.mamicode.com/val;180 printf("%d\n",val);181 traverse_list(phead);182 } //修改具体位置节点的值
最近在看数据结构,就写了写有关链表的一些基础东西,虽然很基础,但是也花了一些心思把他敲了出来,呵呵,自己太菜了点
数据结构 链表基础算法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。