单链表
来源:互联网 发布:mysql安装教程5.7.17 编辑:程序博客网 时间:2024/05/21 17:56
//单链表// 引用库函数#include<stdio.h>#include<Stdlib.h> /*含ma l l o c ( ) 的头文件*/ //定义Elemtype元素类型 typedef int Elemtype; // //定义结构体typedef struct LNode{ Elemtype data; //数据域 struct LNode *next; //指针域 }Node,*LinkList; //LNode,*LinkList相当于 LNode的别名 //////////////////////////////////函数声明void ListPrintf(Node *l);LinkList Link_init(); LinkList Link_addhead(); //头插 LinkList Link_addtail(); //尾插 LinkList Link_add(LinkList l,int i); //插入到第i个位置上 LinkList datasolid(); LinkList LocateElemByData(LinkList l,int i); //按值查找结点值 LinkList LocateElemByID(LinkList l,int i); //按序号查找结点值 LinkList Link_delete(LinkList l,int i); //删除结点操作 int GetLength(LinkList l); //求表长操作//////////////////////////////// #include <stdio.h>int main(){ Node *list,*p; int x,i; printf(" 请选择 操作!\n"); printf(" 1.头插法加入结点\n"); printf(" 2.尾插法加入结点\n"); printf(" 3.数据固化\n"); printf(" 4.按值查找结点值\n"); printf(" 5.按序号查找结点值 \n"); printf(" 6.在第 i个位置上插入新的结点 \n"); printf(" 7.在第 i个位置删除结点 \n"); printf(" 8.求表长操作 \n"); scanf("%d",&x); switch(x) { case 1: list = Link_addhead(); ListPrintf(list); break; case 2: list = Link_addtail(); ListPrintf(list); break; case 3: list = datasolid(); ListPrintf(list); break; case 4: list = datasolid(); printf("请输入你要查找的元素的值 \n"); scanf("%d",&i); p=LocateElemByData(list,i); break; case 5: list = datasolid(); printf("请输入你要查找的结点位置i \n"); scanf("%d",&i); p=LocateElemByID(list,i); printf("查到的结点值:%d \n",p->data); break; case 6: list = datasolid(); printf("请输入你要插入的结点位置i \n"); scanf("%d",&i); Link_add(list,i) ; ListPrintf(list);break; case 7: list = datasolid(); printf("请输入你要删除的结点位置i \n"); scanf("%d",&i); Link_delete(list,i); ListPrintf(list); break; case 8: list = datasolid(); int i =GetLength(list); printf("链表长度为:%d \n",i); ListPrintf(list); break; } printf("\n"); return 0;}//单链表的初始化LinkList Link_init(){ Node *l; l=(LinkList)malloc(sizeof(Node)); //申请结点空间 if(l == NULL) printf("申请内存空间失败 \n"); l->next = NULL; //将next设置为NULL,初始长度为0的单链表 return l;}//打印链表 void ListPrintf(Node *l) { Node *list,*start; list =l; printf("打印链表:"); for(start = list->next; start != NULL; start = start->next) { printf("%d ",start->data); } } //单链表的建立法一,头插法建立单链表 LinkList Link_addhead() { Node *l,*s; LinkList p1; s=l; Elemtype x =1; //x为链表数据域中的数据 l= Link_init(); //初始化链表 printf("请输入你要加入的结点值"); scanf("%d",&x); while(x!=0) { Node *p; p = (LinkList)malloc(sizeof(Node)); //申请新的结点 p->data = x; //结点数据域赋值 p->next = l->next; //将结点插入到表头L-->|2|-->|1|-->NULL l->next = p; printf("p结点的数据:%d \n",p->data); scanf("%d",&x); } return l; } //单链表的建立法一,尾插法建立单链表 LinkList Link_addtail() { Node *l,*r; //r为新增 的表尾指针 l= Link_init(); //初始化链表 r=l; int x; printf("请输入你要加入的结点值"); scanf("%d",&x); while(x!=0) { Node *s; s = (LinkList)malloc(sizeof(Node)); //申请新的结点 s->data = x; r->next=s; r=s; printf("s结点的数据:%d \n",s->data); scanf("%d",&x); } r->next =NULL; return l; } //数据固化 LinkList datasolid() { Node *l,*r; //r为新增 的表尾指针 l= Link_init(); //初始化链表 r=l; int x[9]={ 11,22,33,44,55,66,0 }; printf("数据固化中......\n"); int i=0; while(x[i]!=0) { Node *s; s = (LinkList)malloc(sizeof(Node)); //申请新的结点 s->data = x[i]; r->next=s; r=s; i++; } r->next =NULL; return l; } //按序号查找结点值 LinkList LocateElemByID(LinkList l,int i) { Node *p; int m=-1; //判断 i 的合法性 if(i<1 ) printf("位置不合法!\n"); for(p=l;p->next != NULL;p =p->next) { m++; if(m==i) { return p; break; } } if(p->next ==NULL){ printf("没有这个位置!!\n"); return NULL; } } //按值查找结点值 LinkList LocateElemByData(LinkList l,int i) { //遍历链表 Node *p; for(p=l;p!=NULL;p=p->next) { if(p->data==i) { printf("找到了这个元素!"); return p; break; } } if(p->next ==NULL) printf("没有这个元素!!\n"); return NULL; } LinkList Link_add(LinkList l,int i) //插入到第i个位置上 { //先得到 i-1 个结点 Node *m,*p; m = LocateElemByID(l,i-1); p= (LinkList)malloc(sizeof(Node)); //申请新的结点 printf("请输入新加入结点的值:\n"); scanf("%d",&p->data); p->next =m->next; m->next =p; } //删除结点操作 LinkList Link_delete(LinkList l,int i) { //先得到第 i-1个结点 Node *m,*p; //m为i-1结点,p为i结点 m = LocateElemByID(l,i-1); p=m->next; m->next=p->next; free(p); return l; } //求表长操作 int GetLength(LinkList l) { Node *p; int i=-1; for(p=l;p!=NULL;p=p->next) { i++; } return i; }
0 0
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- android操作系统上的web浏览器开发
- JPA之@Access注解
- Struts2中ValueStack的学习
- 50 家硅谷 IT 公司技术博客
- 2015年工作中遇到的问题141-150
- 单链表
- mysql 显示行号,以及分组排序
- Vert.x 3学习笔记---15( Web篇 )
- ActionBar
- php session
- Mysql命令行添加新用户方法
- 电子邮件的工作原理
- C++指针与引用
- Android关于ListView的item中带checkBox的解决方案