顺序链表笔记

数据结构基础  最简单的部分  顺序链表实际就是个结构体数组  代码如下 比较简单

  1 #include "stdio.h"
  2 #include "string.h"
  3 #define MAXSIZE 100
  4
  5
  6
  7 typedef struct
  8 {
  9     char key[15];
 10     char name[20];
 11     int age;
 12 }DATA;
 13
 14
 15 typedef struct
 16 {
 17     DATA ListData[MAXSIZE+1];
 18     int ListLen;
 19 }SeqListType;
 20
 21
 22
 23 void SeqListInit(SeqListType *SL);      //初始化顺序表
 24 int SeqListLength(SeqListType *SL);     //返回顺序表的元素数量
 25 int SeqListAdd(SeqListType *SL,DATA data);        //向顺序表中添加元素
 26 int SeqListInsert(SeqListType *SL,int n,DATA data);  //向顺序表中插入元素
 27 int SeqListDelete(SeqListType *SL,int n) ;  //删除顺序表中的数据元素
 28 DATA *SeqListFindByNum(SeqListType *SL,int n);   //根据序号返回元素
 29 int SeqListFindByCont(SeqListType *SL,char *key); //按关键字查找
 30 int SeqListAll(SeqListType *sl);                //遍历顺序表中的内容
 31
 32
 33 int main()
 34 {
 35     int i;
 36     SeqListType SL;
 37     DATA data,*data1;
 38     char key [15];
 39
 40     SeqListInit(&SL);
 41     do
 42     {
 43         printf("输入添加的节点:学好  姓名  年龄:");
 44         fflush(stdin);
 45         scanf("%s%s%d",&data.key,&data.name,&data.age);
 46         if(data.age)
 47         {
 48             if(!SeqListAdd(&SL,data)) //若添加节点失败
 49                 break;
 50         }
 51         else
 52             break;
 53     }while(1);
 54     printf("\n顺序表中的节点顺序为:\n");
 55     SeqListAll(&SL);
 56
 57     fflush(stdin);
 58     printf("\n要取出的节点的序号:");
 59     scanf("%d",&i);
 60     data1=SeqListFindByNum(&SL,i);
 61     if(data1)
 62         printf("第%d个节点为:%s,%s,%d\n",i,data1->key,data1->name,data1->age);
 63
 64     fflush(stdin);
 65     printf("\n要查找字节的关键字:");
 66     scanf("%s",key);
 67     i=SeqListFindByCont(&SL,key);
 68     data1=SeqListFindByNum(&SL,i);
 69     if(data1)
 70         printf("第%d个节点为:%s,%s,%d\n",i,data1->key,data1->name,data1->age);
 71
 72     return 0;
 73 }
 74
 75
 76 void SeqListInit(SeqListType *sl)
 77 {
 78     sl->ListLen=0;    //初始化时,设置顺序表长度为0
 79 }
 80
 81 int SeqListLength(SeqListType *SL)
 82 {
 83     return (SL->ListLen);
 84 }
 85
 86 int SeqListAdd(SeqListType *SL,DATA data)
 87 {
 88     if(SL->ListLen==MAXSIZE)
 89     {
 90         printf("顺序表已满,不能再添加节点了");
 91         return 0;
 92     }
 93     SL->ListData[++SL->ListLen]= data;
 94     return 1;
 95 }
 96
 97 int SeqListInsert(SeqListType *sl,int n,DATA data)
 98 {
 99     int i;
100     if(sl->ListLen>MAXSIZE)
101     {
102         printf("顺序表已满,不能插入节点");
103         return 0;
104     }
105     if(n<1 || n>sl->ListLen)
106     {
107         printf("插入节点序号错误,不能插入元素");
108         return 0;
109     }
110     for(i=sl->ListLen;i>=n;i--)
111         sl->ListData[i+1]=sl->ListData[i];
112     sl->ListData[n]=data;
113     sl->ListLen++;
114     return 1;
115 }
116 int SeqListDelete(SeqListType *sl,int n)
117 {
118     int i;
119     if(n<1 || n>sl->ListLen)
120     {
121         printf("删除节点序号错误,不能删除元素");
122         return 0;
123     }
124     for(i=n;i<sl->ListLen;i++)
125         sl->ListData[i]=sl->ListData[i+1];
126     sl->ListLen--;
127     return 1;
128 }
129 DATA *SeqListFindByNum(SeqListType *sl,int n)
130 {
131     if(n<1 || n>sl->ListLen)
132     {
133         printf("节点序号错误,不能返回节点");
134         return 0;
135     }
136     return &(sl->ListData[n]);
137 }
138
139 int SeqListFindByCont(SeqListType *sl,char *key)
140 {
141     int i;
142     for(i=1;i<=sl->ListLen;i++)
143         if(strcmp(sl->ListData[i].key,key)==0)
144             return i;
145     return 0;
146 }
147 int SeqListAll(SeqListType *sl)
148 {
149     int i;
150     for(i=1;i<=sl->ListLen;i++)
151         printf("%s,%s,%d\n",sl->ListData[i].key,sl->ListData[i].name,sl->ListData[i].age);
152 }
时间: 2024-10-18 03:02:56

顺序链表笔记的相关文章

顺序链表——数据结构start!

1 #include <iostream> 2 3 using namespace std; 4 //顺序链表 5 #define MAXSIZE 20 6 #define OK 1 7 #define ERROR 0 8 #define TRUE 1 9 #define FALSE 0 10 typedef int ElemType; 11 typedef int Status; 12 typedef struct 13 { 14 ElemType data[MAXSIZE]; 15 int

删除顺序链表中重复的数 (一) leecode

Given a sorted linked list, delete all duplicates such that each element appear only once. For example,Given 1->1->2, return 1->2.Given 1->1->2->3->3, return 1->2->3. 1 /** 2 * Definition for singly-linked list. 3 * public class

c++数据结构之链表详情1(顺序链表)

长大是人必经的溃烂        ---大卫塞林格 代码是年轻人的新生!!!!!! 程序 = 数据结构  + 算法   --Niklaus EmilWirth 这篇博客在参考一些书籍和教学视频的基础上整理而来,中间夹杂了一些自己写的代码 1.List 先贴一个基础的整型顺序链表list的c++代码 List.cpp 1 #include <iostream> 2 #include "List.h" 3 4 using namespace std; 5 6 //创建链表 7

数据结构 顺序串笔记

/* 数据结构--串笔记 串:由零个或多个字符组成的有限序列. 串也有两种储存方式,顺序储存和链式储存 1.顺序表示的串--顺序串 一般使用字符型数组储存. 确定串的长度有两种方法.一是:在串的末尾加一个结束标记(在C语言 中系统自动在串值的末尾加一个'\0'作为结束标记 ),再使用 strlen 函数得到串的长度.二是:增加一个变量 len 用来储存串的长度. */ // 顺序串的实现即基本操作 # include <stdio.h> # include <stdlib.h> #

DSA——链表笔记【删除(3个),添加(2个),查找】【循环链表-画个图就明确了】

几个容易忽视的点儿,这里记一下 删除结点中,删除特定元素值结点及删除尾结点 都需要通过循环找到!注意!没有循环体,找到即可!! 一.删掉info=el的结点[注意链表为空!和只有一个结点!!]   public void delete(int el) { LinkedNode prev=null,temp=null; if(isEmpty()) return;//第一步就是判断是不是空链表 if(head==tail&&head.info==el)//如果只有一个结点,且 结点元素等于el

java实现顺序链表

SequenceList.java文件 package list; public class SequenceList { private int LIST_INIT_SIZE = 5;//链表的原始大小 private int INCREMENT =1;//链表的增量大小 private Object []SqList = null;//链表 private int curIndex=0;//当前位置 /** * 初始化链表 * */ public void initList() { SqLi

[012]链表笔记--在链表中插入一个节点

插入的数目为num,如果比head小,则插在链表头:如果比链表中元素都大,则插在结尾:否则插在链表中: 代码如下: 1 Link* Link::Add(Link* pLink, int num) { 2 Link *p1,*p2; 3 p1 = pLink; 4 Link *p0 = new Link; 5 p0->id = num; 6 7 while ((p0->id > p1->id) && (p1->next != NULL)) { 8 p2 = p1

【数据结构】顺序表和链表

一.顺序表 顺序表定义 :顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素.使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表.顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中. 顺序表可以分为静态顺序表和动态顺序表,静态较为简单,本文提供全部动态顺序表基本操作的代码. 顺序表的基本操作:

C#&amp;java重学笔记(泛型)

C#部分: 1.泛型的出现主要用于解决类.接口.委托.方法的通用性,通过定义泛型类.接口.委托.方法,可以让不同类型的数据使用相同运算规则处理数据,方便了开发. 2.利用System.Nullable<T>泛型可以生成可空的值类型变量,值类型的可空泛型可以简写为关键字加问号,如:int? val=new int?(); 3.关于布尔类型的泛型可空& |操作,我们可以知道,如果关心不关心操作数是否为空就能得出结果,那么空值就是无所谓的. 4.可空的泛型值类型的HashValue属性值为t