1.链表最好采用带头节点的逻辑结构,在删除等操作上比较方便,头节点便是0号节点;
2.在主函数之后定义的函数须在主函数之前申明;
3.要改变链表结构,续传递指向头节点指针的指针;
4.不能直接搬数据结构上的伪代码(严玮文版),还是要自己思考,最好能够画图;
5.调试时出现死循环的话,在终端键入:ps aux
查看死循环进程的pid,然后键入: kill -9 进程的pid 就能终止进程了.
#include<stdio.h>
#include<stdlib.h>
typedef char ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;

}Lnode,*LinkList;
int ListInsert(LinkList *L, int i,ElemType e);//插入元素
int ListDel(LinkList *L, int i);//删除元素
ElemType GetElem(LinkList L,int i);//获得第i个节点
void del(LinkList *L,int mink,int maxk);//删除区间节点
void inverse(LinkList *L);//逆置链表
int main()
{

LinkList Q;
initLink(&Q);
ListInsert(&Q,1,'f');
ListInsert(&Q,1,'e');
ListInsert(&Q,1,'d');
ListInsert(&Q,1,'c');
     ListInsert(&Q,1,'a');
     display(Q);
     del(&Q,98,100);
     display(Q);
     inverse(&Q);
     printf("After invert\n");
     display(Q);
     ListDel(&Q,1);
     display(Q);
     printf("The No.2 Element is:%c",GetElem(Q,2));
     return 1;
}
void initLink(LinkList *L)//Only transport the address can change the Link
{
     *L=(LinkList)malloc(sizeof(Lnode));
     (*L)->next=NULL;

}

ElemType GetElem(LinkList L,int i)
{
     Lnode *p=L->next;
     int j=1;
     while(p&&j<i)
     {
          p=p->next;
          ++j;
     }
     if(!p||j>i) return 0;
     return p->data;
}

void display(LinkList L)
{
     Lnode *p=L->next;
if(p==NULL) printf("No element~\n");
else
{
while(p)
{
printf("%5c->",p->data);
p=p->next;
}
}
printf("\n");
}
int ListInsert(LinkList *L, int i,ElemType e)
{
      Lnode *p=*L;//p point to the first node
      int j=0;
      Lnode *s;
      while(p&&j<i-1)//search the No.(i-1) node
      {
           p=p->next;
           j++;

}
      if(!p||j>i-1) return 0;    //i<1 or >ListLenth+1
      s=(LinkList)malloc(sizeof(Lnode));
      s->data=e;
      s->next=p->next;
      p->next=s;
      return 1;
}
int ListDel(LinkList *L, int i)
{
     Lnode *p=*L;
     Lnode *pre=p;
     int j=0;
     while(p&&j<i)//search the No.i node
      {
           printf("ALALLA");
           pre=p;
           p=p->next;
           j++;
      }
      if(!p||j>i) return 0;    //i<1 or >ListLenth+1
      pre->next=p->next;
}
//delete the element in the sorted linklist that value between mink and maxk

void del(LinkList *L,int mink,int maxk)
{
     Lnode *p=*L;
     Lnode *pre;
     Lnode *q,*s;
     while(p&&p->data<mink)
     {
          pre=p;p=p->next;
          printf("address of p:%d",p);
     }
     if(p)
     {while(p&&p->data<maxk) p=p->next;}

pre->next=p;

/*free the memory
     q=pre->next;
     while(q!=p)
     {
          s=q->next;free(q);q=s;
     }*/
}
//avert a linklist
void inverse(LinkList *L)
{
     Lnode *p=*L;
     Lnode *s;
     p=p->next;//move a element
     (*L)->next=NULL;
     while(p)
     {
          //insert at front
          s=p->next;
          p->next=(*L)->next;
          (*L)->next=p;
          p=s;

}
}

转载于:https://blog.51cto.com/8672742/1368520

考研复习(2)链表操作相关推荐

  1. 天勤考研数据结构———单链表操作

    定义单链表 typedef struct LNode{int data;struct LNode *next; }LNode; A\B皆为有序链表,合并排序到C中  头插法 void merge(LN ...

  2. 天勤考研数据结构———双链表操作

    定义双链表的结构体类型 typedef struct DLNode{     int data;     struct DLNode *next;     struct DLNode *prior; ...

  3. 南京艺术学院计算机作曲,南京艺术学院932主科(上机操作计算机作曲应用)考研复习经验...

    考研是一场持久战,在南京艺术学院932主科(上机操作计算机作曲应用)考研复习的过程中,难免会遇到各种各样的问题和挑战.在进入强化冲刺阶段之后,高强度的学习和心里压力更是让很多学子身心疲惫!如何少走弯路 ...

  4. 操作系统王道考研复习——第一章(计算机系统概述)

    操作系统王道考研复习--第一章(计算机系统概述) 计算机系统概述 1.1操作系统的基本概念 1.1.1 操作系统的概念 1.1.2 操作系统的特征 1. 并发 2. 共享 3. 虚拟 4. 异步 1. ...

  5. 操作系统考研复习——第四章(文件管理)

    操作系统考研复习--第四章(文件管理) 4. 文件管理 4.1 文件管理基础 4.1.1 文件的概念 1. 数据项.记录和文件 2. 文件属性 3. 文件系统的接口 4. 文件的基本操作 5. 文件的 ...

  6. 计算机专业考研复习要点,计算机专业考研的复习要点

    计算机专业考研的复习要点 考生们在进行计算机专业考研的时候,要掌握好复习的要点.小编为大家精心准备了计算机专业考研复习的知识点,欢迎大家前来阅读. 计算机考研重点:运输层 1.TCP提供端对端.可靠的 ...

  7. 计算机考研压分的学校,篡改分数,恶意压分...考研院校的骚操作大盘点!小心避坑!...

    篡改分数,恶意压分...考研院校的骚操作大盘点!小心避坑! 摘要:对考研的同学来说,择校是至关重要的一环.尤其是在往届考生群中,大家讨论最多的就是要不要换学校.一些同学经历了被歧视.专业课压分 作者 ...

  8. 考计算机科学考研老师问,名师答疑:计算机专业考研复习6问!

    原标题:名师答疑:计算机专业考研复习6问! 摘要:针对计算机专业考研,有不少同学存在些疑问,下面是老师对集中问题给的回答. ▶问题一:计算机考研专业课2009年开始实行统考,老师能不能结合往年的计算机 ...

  9. 21考研复习规划和北邮计算机考研介绍

    21考研复习规划和北邮计算机考研报名,学院,导师选择 同学让我给你介绍一下北邮计算机类专业考研的情况. 北邮共有四个学院都属于计算机类的,分为两大类,一类是考专业课803,另一类是考807,803包括 ...

  10. 计算机考研时间计划表,【考研复习计划】_这里有最详细的考研复习计划时间表...

    英语 /词汇 /专业 原标题:这里有最详细的考研复习计划时间表! 考研准备阶段:(寒假-3月份) 一.选择院校.专业 1.确定想要学习方向,初步确立目标院校和专业 2.了解专硕和学硕的区别~ 2017 ...

最新文章

  1. 【Live555】liveMedia下载、配置、编译、安装、基本概念
  2. jpa中使用Query判断条件查询
  3. 【解决方案】istio-ingressgateway HTTP probe failed with statuscode: 503
  4. 莫队算法(Mo's_Algorithm)
  5. JAVA 设计模式 观察者模式
  6. Servlet萌新基础
  7. 计算机组成原理写一个运算器,计算机组成原理运算器的实现实验报告.doc
  8. Tensorflow2.0(1):加载图片数据集--TFRecord
  9. Spring Boot 全局异常捕获
  10. basys3利用microblaze连接Pmod ad2
  11. 让在vc6创建的程序中,控件可以随xp风格的改变而变化,不用再程序中添加代码来自己实现~...
  12. 软件再快不如自带:找不到电脑文件?教你这 3 个Mac搜索技巧
  13. 最小化JavaScript代码
  14. RTKLIB专题学习(八)—卫星星历和钟差
  15. ArcFace阈值选择
  16. TT 的旅行日记(Dijkstra)
  17. 运用Chrome浏览器ADB插件获取页面元素
  18. python的gmtime函数_学不会的Python函数——日期时间函数
  19. 神经网络中的BN理解
  20. Gradle排除依赖模块的某个类

热门文章

  1. 评论.gitignore?
  2. 如何使用cURL一次测量请求和响应时间?
  3. 获取(可能)关联数组中的第一个键?
  4. 循环报数java代码_循环报数 Java实现
  5. php mixed约束,Mixed Content: 混合被动/显示内容和混合活动内容
  6. html源码加密ensure-china_php源码加密方法详解
  7. obs多推流地址_什么都比不上动手能力,OBS 推流实践小记
  8. 边框border(HTML、CSS)
  9. JUC本质解析+进程/线程
  10. 测试线程的状态(Java)