单链表

3.1-栈

China☆狼群 提交于 2019-12-15 23:58:23
一、单选 1. 栈和队列具有相同的( )。 A. 抽象数据类型 B. 逻辑结构 C. 存储结构 D. 运算 [Solution] 栈和队列具有相同的逻辑结构,即线性逻辑结构, $therefore B$✔️. 8. 向一个栈顶指针为top的链栈中插入一个x结点,则执行( )。 A. top->next=top; B. x->next=top->next;top->next=x; C. x->next=top;top=x; D. x->next=top;top=top->next; [Solution] 链栈采用不带头结点的单链表表示时,进栈操作在首部插入一个结点x(x->next=top;),再将top指向该插入的结点(top=x;) Push时,先让top与新结点联系上,再进行插入。如顺序栈的Push:top先+1,后插入;链栈的Push:x->next = top; top = x; $therefore B$✔️. 9. 链栈执行Pop操作,并将出栈的元素存在x中应该执行( )。 A. x=top;top=top->next B. x=top->data; C. top=top->next;x=top->data; D. x=top->data;top=top->next; [Analysis] 出栈时,应该元素先出栈,top再-1。即x=top->data;top=top-

Java数据结构——单链表

早过忘川 提交于 2019-12-15 20:19:14
一、单链表的概念 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。这组存储单元可以是连续的,也可以是不连续的。 存储单元由两部分组成,数据源和指针,数据源放数据,指针指向下个存储单元。 二、单链表的结构 采用Node实体类类标识,其中data为存储的数据,next为下一个结点的指针。 //链表的实体类 class Node{ public int data; public Node next; public Node(int data) { this.data = data; } } 三、单链表的常见操作 package org.learn.link; public class TestList { public static void main(String[] args) { // TODO Auto-generated method stub MyLinkedLsit mylist = new MyLinkedLsit(); mylist.addNodeH(22); mylist.addNodeH(32); mylist.addNodeH(25); mylist.addNodeH(11); MyLinkedLsit mylist1 = new MyLinkedLsit(); mylist.print(); System.out.println(

线性表

一世执手 提交于 2019-12-06 11:40:32
一、基本概念 线性表:由n(n>=0)个数据特性相同的元素构成的有限序列称为线性表。线性表中元素的个数n定义为线性表的长度,n=0时称为空表。 顺序表 :是线性表的顺序存储结构的一种别称。 特点:是以“存储位置相邻”表示两个元素之间的前驱、后继关系。 优点:是可以随机存取表中任意一个元素。 缺点:是每作一次插入或删除操作时,平均来说必须移动表中一半元素。 常应用于主要是为查询而很少作插入和删除操作,表长变化不大的线性表。 链表 :是线性表的链式存储结构的别称。 特点:是以“指针”指示后继元素,因此线性表的元素可以存储在存储器中任意一组存储单元中。 优点:是便于进行插入和删除操作。 缺点:是不能进行随机存取,每个元素的存储位置都存放在其前驱元素的指针域中,为取得表中任意一个数据元素都必须从第一个数据元素起查询。 二、线性表的表示与实现 1、顺序表示和实现 #include <iostream> using namespace std; //顺序表的存储结构,ElemType假设为int #define MAXSIZE 100 typedef struct{ int *elem; int length; }SqList; //顺序表的初始化 bool InitList(SqList &list){ list.elem =new int[MAXSIZE]; list.length=0;

算法刷题-1-单链表操作

家住魔仙堡 提交于 2019-12-04 07:14:51
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 //练习单链表操作:给出单链表 head 和 n,要求删除单链表倒数第n个结点,并连接剩余结点 5 //例子:1-2-3-4-5,n=2,删除后应该是:1-2-3-5 6 typedef struct ListNode{ 7 int data; 8 ListNode *next; 9 }ListNode; 10 11 int createList(ListNode *&head,int a[],int len) 12 { 13 head=(ListNode*)malloc(sizeof(ListNode)); 14 head->next=NULL; 15 ListNode *p,*q; 16 q=head; 17 for(int i=0;i<len;i++) 18 { 19 p=(ListNode*)malloc(sizeof(ListNode)); 20 p->data=a[i]; 21 p->next=NULL; 22 q->next=p; 23 q=q->next; 24 } 25 26 } 27 void print(ListNode *p) 28 { 29 p=p->next; 30 while(p) 31 { 32 printf("%d

创建一个带头结点的单链表,在单链表中删除值相同的多余结点,并遍历链表,删除链表最大节点。

↘锁芯ラ 提交于 2019-12-04 05:53:05
/* 描述:创建一个带头结点的单链表,在单链表中删除值相同的多余结点,并遍历链表,删除链表最大节点。 输入:从键盘上输入数据元素个数n和对应n个元素。 输出:输出删除多余结点的单链表序列。 输入样例:6 3 1 3 4 4 5--7个 输出样例:3 1 4 5 */ #include <stdio.h> #include<string.h> #include <stdlib.h> #include <malloc.h> typedef struct Node{ int data; struct Node *next; }LinkList; void create(LinkList *&L,int a[],int n){ int i; LinkList *s,*r; L=(LinkList *)malloc(sizeof(LinkList)); r=L; for(i=0;i<n;i++){ s=(LinkList *)malloc(sizeof(LinkList)); s->data=a[i]; r->next=s; r=s; } r->next=NULL; } /*在单链表中删除值相同的多余结点*/ void deleteLinkList(LinkList *&L){ LinkList *pre=L,*p=L->next,*s; int k=0; while(p!=NULL){ s

数据结构之单链表结构与操作

浪子不回头ぞ 提交于 2019-12-04 01:05:09
单链表结构 头结点不存放数据,开始存放数据的节点为开始节点。 带头结点的单链表相关操作 /* * @file 单链表.cpp * @brief 单链表的创建及其相关操作 * @author linzijie * @platform Ubuntu 16.04 gcc version 5.4.0 * @date 2019/11/9 */ #include <iostream> #include <vector> using namespace std; // 单链表节点存储的数据类型定义 typedef int ElemType; // 单链表结构体定义如下 typedef struct LNode { ElemType data; struct LNode * next; }LinkList; /* * @brief 头插法建立单链表 * @param list 单链表头结点指针的引用 * datas 需要放入节点的数据 * @note list指针为空,建立时初始化,头结点不保存数据 * 采用头插法,数据的顺序与datas相反 * 动态申请内存空间,需要调用DestroyLinkList函数手动销毁 * @Sample LinkList *list = nullptr; * vector<ElemType> datas{1, 2, 3, 4, 5}; *

6-6 求单链表结点的阶乘和(15 分) 本题要求实现一个函数,求单链表L结点的阶乘和。这里默认所有结点的值非负,且题目保证结果在int范围内

匿名 (未验证) 提交于 2019-12-03 00:30:01
题目:https://pintia.cn/problem-sets/14/problems/738 #include <stdio.h> #include <stdlib.h> typedef struct Node *PtrToNode; struct Node { int Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */ }; typedef PtrToNode List; /* 定义单链表类型 */ int FactorialSum( List L ); int main() { int N, i; List L, p; scanf("%d", &N); L = NULL; for ( i=0; i<N; i++ ) { p = (List)malloc(sizeof(struct Node)); scanf("%d", &p->Data); p->Next = L; L = p; } printf("%d\n", FactorialSum(L)); return 0; } int FactorialSum(List L){ int i; int sum,totalsum=0; while(L!=NULL){ sum=1; for(i=L->Data;i>=1;i--){ sum=sum*i; } totalsum+

带头节点单链表的插入(元素) 操作(C语言完整版)

匿名 (未验证) 提交于 2019-12-03 00:22:01
#include <stdio.h> #include <malloc.h> #define N 5 typedef struct node { char name[20]; float score; struct node *next; }stud; stud *creat(int n) { stud *p, *h, *s; int i; if((h=(stud*)malloc(sizeof(stud)))==NULL) { printf("No memory space can be allocated!"); exit(0); } h->name[0]='\0'; h->score=0; h->next=NULL; p=h; for(i=0;i<n;i++) { if((s=(stud*)malloc(sizeof(stud)))==NULL) { printf("No memory space can be allocated!"); exit(0); } p->next=s; printf("Enter the %d name and score ",i+1); scanf("%s%f",s->name,&s->score); s->next=NULL; p=s; } return(h); } stud *del(stud *head, char name[10]) {

带头节点单链表的删除(元素) 操作(C语言完整版)

匿名 (未验证) 提交于 2019-12-03 00:22:01
#include <stdio.h> #include <malloc.h> #define N 5 typedef struct node { char name[20]; float score; struct node *next; }stud; stud *creat(int n) { stud *p, *h, *s; int i; if((h=(stud*)malloc(sizeof(stud)))==NULL) { printf("No memory space can be allocated!"); exit(0); } h->name[0]='\0'; h->score=0; h->next=NULL; p=h; for(i=0;i<n;i++) { if((s=(stud*)malloc(sizeof(stud)))==NULL) { printf("No memory space can be allocated!"); exit(0); } p->next=s; printf("Enter the %d name and score ",i+1); scanf("%s%f",s->name,&s->score); s->next=NULL; p=s; } return(h); } stud *del(stud *head, char name[10]) {

6-6 求单链表结点的阶乘和

匿名 (未验证) 提交于 2019-12-03 00:18:01
本题要求实现一个函数,求单链表 L 结点的阶乘和。这里默认所有结点的值非负,且题目保证结果在 int 范围内。 函数接口定义: int FactorialSum( List L ); 其中单链表 List 的定义如下: typedef struct Node *PtrToNode; struct Node { int Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */ }; typedef PtrToNode List; /* 定义单链表类型 */ 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> typedef struct Node *PtrToNode; struct Node { int Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */ }; typedef PtrToNode List; /* 定义单链表类型 */ int FactorialSum( List L ); int main() { int N, i; List L, p; scanf("%d", &N); L = NULL; for ( i=0; i<N; i++ ) { p = (List)malloc(sizeof(struct Node));