指尖上的代码[C语言版]-<7>数据结构之单链表
来源:互联网 发布:淘宝劵 编辑:程序博客网 时间:2024/05/01 21:43
<7>数据结构之单链表
由于每次分析画图浪费太多时间,所以博客的分析配图就不上了!不明白的可以给我留言!
代码:
#include "stdio.h"#include "stdlib.h"#define DataType int#define Type "%d"/*全局变量*/int flag=0;typedef struct node{ DataType data; /*数据域*/ struct node *next; /*指针域指向下一个结点*/} linktable;linktable *new,*head;/*函数声明*/void Create();void Print();void UpInsert();void DownInsert();void Delete();int GetMax();/*主函数*/int main(void){ int options; printf("数据结构>>单链表\n"); printf("1.初始化单链表\n"); printf("2.遍历单链表\n"); printf("3.在位置前插入数据\n"); printf("4.在位置后插入数据\n"); printf("5.按位置删除数据\n"); printf("6.退出\n"); while(1) { printf("请输入选项进行操作(1-6):"); scanf("%d",&options); switch(options) { case 1:Create();break; case 2:Print();break; case 3:UpInsert();break; case 4:DownInsert();break; case 5:Delete();break; case 6:exit(0);break; default:printf("请输入1-6之间的数字进行选择!\n"); } } return 0;}/*初始化单链表*/void Create(){ int n,i; DataType x; linktable *l; printf("请输入你要创建的链表的长度:"); scanf("%d",&n); for(i=1;i<=n;i++) { new=(linktable *)malloc(sizeof(linktable)); printf("请输入第%d个元素的值:",i); scanf(Type,&x); new->data=x; new->next=NULL; if(i==1) { l=new; head=l; } else { l->next=new; l=new; } } printf("单链表初始化完成!\n"); flag=1;}/*遍历函数*/void Print(){ linktable *p; p=head; if(flag==0) { printf("请先初始化单链表!\n"); } else { do { printf(Type,p->data); printf(" "); p=p->next; } while(p!=NULL); printf("\n"); }}/*插入函数(在前面插)*/void UpInsert(){ int max,locate,i=0,x; linktable *p; p=head; max=GetMax(); if(flag==0) { printf("请先初始化单链表!\n"); } else { printf("你想在那个位置插入元素(0<位置<=%d):",max); scanf("%d",&locate); if(locate>max||locate<=0) { printf("你输入的位置不存在!\n"); UpInsert(); } else { printf("请输入你要插入元素的值:"); scanf(Type,&x); new=(linktable *)malloc(sizeof(linktable)); new->data=x; new->next=NULL; if(locate==1) { new->next=head; head=new; } else { for(i=0;i<locate-2;i++) { p=p->next; } new->next=p->next; p->next=new; } } printf("元素已插入成功!\n"); Print(); }}/*插入函数(在后面插)*/void DownInsert(){ int max,locate,i=0,x; linktable *p; p=head; max=GetMax(); if(flag==0) { printf("请先初始化单链表!\n"); } else { printf("你想在那个位置插入元素(0<位置<=%d):",max); scanf("%d",&locate); if(locate>max||locate<=0) { printf("你输入的位置不存在!\n"); UpInsert(); } else { printf("请输入你要插入元素的值:"); scanf(Type,&x); new=(linktable *)malloc(sizeof(linktable)); new->data=x; new->next=NULL; for(i=0;i<locate-1;i++) { p=p->next; } if(locate==max) { p->next=new; } else { new->next=p->next; p->next=new; } } printf("元素已插入成功!\n"); }}/*删除函数*/void Delete(){ int max,locate,i; linktable *p1,*p2; p1=head; max=GetMax(); if(flag==0) { printf("请先初始化单链表!\n"); } else { if(head!=NULL) { printf("请输入你要删除的元素的位置(0<位置<=%d):",max); scanf("%d",&locate); if(locate>max||locate<=0) { printf("你输入的位置不存在!\n"); Delete(); } else { if(locate==1) { head=p1->next; free(p1); } else { for(i=0;i<locate-2;i++) { p1=p1->next; } p2=p1->next; if(locate==max) { p1->next=NULL; free(p2); } else { p1->next=p2->next; free(p2); } } printf("元素删除成功!\n"); } } else { printf("单链表中已没有数据,请重新初始化后再进行操作!\n"); } }}int GetMax() /*获取当前单链表中元素的个数*/{ int max=0; linktable *p; p=head; while(p!=NULL) { max++; p=p->next; } return max;}
编译结果:
点石成金 写于 2012/08/17/00:12
- 指尖上的代码[C语言版]-<7>数据结构之单链表
- 指尖上的代码[C语言版]-<6>数据结构之顺序表
- 指尖上的代码[C语言版]-<1>
- 指尖上的代码[C语言版]-<2>
- 指尖上的代码[C语言版]-<3>
- 指尖上的代码[C语言版]-<4>
- 指尖上的代码[C语言版]-<5>
- 数据结构之单链表(c语言版)
- 数据结构(C语言版)规范代码之栈
- 数据结构(C语言版)规范代码之队列
- 数据结构(C语言版)规范代码之树(1)
- 数据结构(C语言版)规范代码之图(邻接表的拓扑排序)
- 数据结构C语言版单链表的实现
- 数据结构C语言版--单链表的基本功能实现
- 数据结构 链表 单链表的建立 C语言版
- 数据结构之队列(C语言版)
- 数据结构之插入排序的实现(C语言版)
- 数据结构c语言版之顺序表的删除
- “IT程序猿是怎么练成的” ——浅阅读是个技术活:食不厌精,脍不厌细
- JavaScript【日期(今天是:xxxx年xx月xx日)】
- android4.0上ListView出现残影
- cocos2d-x场景动态切换
- MongoDB Sharding配置
- 指尖上的代码[C语言版]-<7>数据结构之单链表
- 线索二叉树
- JavaScript【省市级联】
- atexit
- Java代码混淆
- cocos2dx创建线程
- [收集]关于ucenter忘记创始人密码的两种做法
- 使用jQuery创建的垂直视差背景
- C 左值与右值