实验2 单链表的创建和操作
来源:互联网 发布:怎么在淘宝上发布宝贝 编辑:程序博客网 时间:2024/06/05 21:18
#include<stdio.h>#include<stdlib.h>#include<malloc.h>#define NULL 0#define OK 1#define ERROR -1#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef int Status;typedef int ElemType;typedef struct link{int data;//elemtype类型C本身没有我们通过宏定义创造了它 struct link *next;}t_link,*pLink;//定义创建链表的函数pLink create(){int n; pLink p1,p2,head;head=p1=(pLink)malloc(sizeof(t_link)); //首先开辟一个内存单元,作为头结点head->data=0; //头结点数据域为0if(!head) exit(ERROR); //如果开辟空间失败,退出程序else{printf("请输入数据的个数:\n"); scanf("%d",&n);printf("输入的数据为:\n");for(int i=1;i<=n;i++){ p2=(pLink)malloc(sizeof(t_link)); //开辟新结点 scanf("%d",&p2->data); p1->next=p2; //连上新结点 p1=p1->next; //指针前移,为下一个结点做准备} p1->next=NULL;} //尾结点指向空,防止出错return head;}//定义遍历函数,让它输出链表的每一个结点的data域值Status traveser(pLink p){printf("头指针的Data域是%d\n",p->data);p=p->next; //跳过头指针printf("链表各个数据为\n");while(p){ //当P不为空值时,循环输出data域 printf("%d ",p->data); p=p->next;}printf("\n");return true;}//在第i个插入eStatus Insert(pLink &L,int i,ElemType e){ pLink p,s;p=(pLink)malloc(sizeof(t_link));p=L;int j=0;while (p&&(j<i-1)){p=p->next;++j;}if(!p||j>(i-1))return ERROR;s=(pLink)malloc(sizeof(t_link));s->data=e;s->next=NULL;s->next=p->next;p->next=s;return OK;}//删除第i个Status Delete(pLink &L,int i){ pLink p,q;p=(pLink)malloc(sizeof(t_link));p=L;int j=0;while((p->next)&&(j<i-1)){p=p->next; ++j;}if((!p->next)||(j<i-1))return ERROR;q=(pLink)malloc(sizeof(t_link));q=p->next;p->next=q->next;free(q);return OK;}//查找Status GetElem(pLink L,int i){int e; pLink p;p=(pLink)malloc(sizeof(t_link));p=L->next;int j=1;while (p&&j<i){p=p->next;++j;}if(!p||j>i)return ERROR;e=p->data;printf("查找的数是%d\n",e);return OK;} void main(){ pLink h=NULL; //定义h作为链表头,使其指向空,防止错误出现 h=create(); //创建链表,h指向其头结点的内存域 traveser(h); //遍历链表//插入 int m,x,n,i; printf("在第m个前面插入元素:\n"); scanf("%d",&m); printf("插入的元素x为:\n"); scanf("%d",&x);Insert(h,m,x); printf("插入后的元素为:\n"); traveser(h); //遍历链表//删除 printf("删除的元素是第n个:\n"); scanf("%d",&n);Delete(h,n); printf("删除后的元素是:\n"); traveser(h); //遍历链表//查找 printf("查找的数是第i个数\n"); scanf("%d",&i); GetElem(h,i); }
阅读全文
0 0
- 实验2 单链表的创建和操作
- 实验2_Java类的创建和使用
- 实验一、进程的创建和撤销
- 实验名称: 类和对象的创建
- 守护进程的概念和创建实验
- 单链表的创建和常用操作
- 单链表操作的实验课
- 数据库的创建和操作
- 哈夫曼树的创建和操作
- 实验二 数据库及数据库对象的创建和管理
- c/c++单链表的创建和删除,插入,反转操作
- 数据结构实验报告单链表的基本操作
- [实验二] 单链表的基本操作
- 图的操作实验
- 实验4:栈和队列的基本操作实现及其应用2
- 关于强制转换操作符reinterpret_cast的实验和总结
- 实验四 顺序栈和链队列的操作
- mysqldumper 与 Innobackupex的备份和恢复操作实验过程
- BZOJ1305 [CQOI2009]dance跳舞 最大流+二分
- [DesignPattern]命令模式
- 手动安装Apache+PHP+MYSQL及环境配置
- 博客园首页新随笔联系管理订阅 随笔- 4 文章- 0 评论- 17 高斯白噪声 版权声明:本文发布于http://younghit.cnblogs.com/,版权由Young!所有。如需转载,请
- ssm---(springMvc+spring+mybatis)
- 实验2 单链表的创建和操作
- Android中Textview显示带html文本一-------【HTML标签】
- 关于linux mmc/sd驱动程序架构
- 《源代码》
- python中split()函数与strip()
- Spring Boot 学习笔记(二)
- 线程池简单例子
- caffe python接口:可视化每层图像特征
- leetcode