数据结构一一线性表的链式存储结构之插入与遍历

来源:互联网 发布:扭簧机编程 编辑:程序博客网 时间:2024/06/03 21:21

单链表第i个数据插入结点的算法思路:

  1. 声明一结点p指向链表第一个结点,初始化j从1开始;
  2. 当j < i时,就遍历链表,让p的指针向后移动,不断指向下一结点,j累加1;
  3. 若到链表末尾p为空,则说明第i个元素不存在;
  4. 否则査找成功,在系统中生成一个空结点s;
  5. 将数据元素e賦值给s->data;
  6. 单链表的插入标准语句s->next=p->next; p->next=s;
  7. 返回成功。
#include <iostream>#include <stdio.h>#include <time.h>#include <malloc.h>#define ERROR0#define OK1typedef int Status;/* Status是函数的类型,其值是函数结果状态代码,如OK等 */typedef int ElemType;/* ElemType类型根据实际情况而定,这里假设为int */typedef struct Node{ElemType data;struct Node *next;}Node;/* 定义LinkList */typedef struct Node *LinkList;/* 初始化顺序线性表 */Status InitList(LinkList *L){*L=(LinkList)malloc(sizeof(Node)); /* 产生头结点,并使L指向此头结点 */if(!(*L)) /* 存储分配失败 */{return ERROR;}(*L)->next=NULL; /* 指针域为空 */return OK;}/* 初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数 */int ListLength(LinkList L){int i=0;LinkList p=L->next; /* p指向第一个结点 */while(p){i++;p=p->next;}return i;}/* 初始条件:顺序线性表L已存在 *//* 操作结果:依次对L的每个数据元素输出 */Status ListTraverse(LinkList L){LinkList p=L->next;while(p){visit(p->data);p=p->next;}printf("\n");return OK;}Status visit(ElemType c){printf("-> %d ",c);return OK;}/* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L), *//* 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1 */Status ListInsert(LinkList *L,int i,ElemType e){int j;LinkList p,s;p = *L;     /* 声明一个结点 p,指向头结点 */j = 1;while (p && j < i)     /* 寻找第i个结点 */{p = p->next;++j;}if (!p || j > i)return ERROR;   /* 第i个元素不存在 */s = (LinkList)malloc(sizeof(Node));  /*  生成新结点(C语言标准函数) */s->data = e;s->next = p->next;      /* 将p的后继结点赋值给s的后继  */p->next = s;          /* 将s赋值给p的后继 */return OK;}int main(){LinkList L;Status i;int j,k;char opp;i=InitList(&L);printf("链表L初始化完毕,ListLength(L)=%d\n",ListLength(L));printf("\n1.遍历操作 \n2.插入操作  \n0.退出 \n请选择你的操作:\n");while(opp != '0'){scanf("%c",&opp);switch(opp){case '1':ListTraverse(L);printf("\n");break;case '2':srand((unsigned)time(NULL));for(j=1;j<=10;j++){i=ListInsert(&L,1,rand()%100);}printf("在L的表头依次插入10个随机数后:");ListTraverse(L);printf("\n");break;case '0':exit(0);}}}


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 红河谷宁静裸露片段 宁静致远适合什么人 宁静致远图片 那年夏天宁静的海 宁静露球图片 宁静怒怼网友 非宁静无以致远上一句 红河谷宁静露两点照片 宁静露球在几分钟 宁静儿子照片 宁静现任老公 宁静的意思是什么 宁静是什么意思 跨国婚姻 吕不韦张铁林吃宁静奶 阳光灿烂的日子宁静几分 宁非 宁馨隋然 宁馨儿 宁馨 宁馨作品 宿宁馨 宁馨苑小区 曾宁馨 好命糟糠妻宁馨 宁馨园二手房 幼师宁馨在线阅读 隋然宁馨结婚是哪一集 郑州宁馨苑小区 好命糟糠妻 宁馨 隋然宁馨50万是哪一集 隋然 宅卦 宅印 光鲜宅女 宅女社区 宅女 宅男宅女 宅女宅女必上神级网站 宅女网 宅女的随身庄园