头插法建立单链表

#include<stdio.h>
#include<stdlib.h>

typedef struct node{
int data;
struct node *next;
}LNode,*LinkList;

LinkList creat_list()
{
LinkList head=NULL;
head=(LinkList)malloc(sizeof(LNode));
if(head==NULL)
{
printf("memory out of use\n");
return NULL;
}
head->next=NULL;
head->data=0;
return head;
}

int insert(LinkList head,int n)
{
for(int i=0;i<n;i++)
{

LinkList head_t=head->next;
LinkList new_node=NULL;

new_node=(LinkList)malloc(sizeof(LNode));
if(new_node==NULL)
{
printf("memory out of use\n");
return -1;
}
printf("please input the value:\n");
scanf("%d",&new_node->data);
new_node->next=head_t;
head->next=new_node;
}

return 0;
}
int show_list(LinkList head)
{
LinkList tem;
tem=head->next;
while(tem)
{
printf("%3d",tem->data);
tem=tem->next;
}
return 0;
}

int main()
{
LinkList head;
int n;
printf("please input the size which you want to insert\n");
scanf("%d",&n);
head=creat_list();
insert(head,n);
show_list(head);
return 0;
}

时间: 2024-11-09 06:09:45

头插法建立单链表的相关文章

博客第二天——头插法建立单链表

今天是第二天,今天遇到一个题:本题要求实现一个函数,求单链表L结点的阶乘和.这里默认所有结点的值非负,且题目保证结果在int范围内. 首先考虑这个题目本身不难,鉴于本人刚学习数据结构,题目中已给代码的单链表的创建值得我考虑.题目中给的是头插法代码如下:分析一下这段代码 int N, i; List L, p; scanf("%d", &N); L = NULL; for ( i=0; i<N; i++ ) { p = (List)malloc(sizeof(struct

C/C++,数据结构实现两个链表的合并(尾插法建立单链表,求链表长度,直接插入排序)

1题目 实现两个链表的合并 2基本功能要求: 1.建立两个链表A和B,链表元素个数分别为m和n个. 2.假设元素分别为(x1,x2,-xm),和(y1,y2, -yn).把它们合并成一个线性表C,使得: 当m>=n时,C=x1,y1,x2,y2,-xn,yn,-,xm 当n>m时,C=y1,x1,y2,x2,-ym,xm,-,yn 3.输出线性表C: 用直接插入排序法对C进行升序排序,生成链表D,并输出链表D. 3测试数据: (1)A表(30,41,15,12,56,80) B表(23,56,

数据结构—头插法逆转单链表——空间复杂度为O(1)

#if 1 #include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; struct Node { int data; Node *next; }; //初始化 Node *init() { Node *head=new Node; head->next=NULL; return head; } //头插法创建节点 void insetList(Node *head,in

C++练习 | 不使用头插法逆转单链表

void D(PBook pHead) { PBook p,q,s; p=pHead->next->next; q=p->next; s=q->next; pHead->next->next=NULL; p->next=pHead->next; q->next=p; p=q; q=s; while(q->next!=NULL) { s=q->next; q->next=p; p=q; q=s; } q->next=p; pHea

建立单链表的方法

#include<iostream> using namespace std; struct node{ int d; struct node *next; };//定义结点 node *build1()//头插法构造单链表 { node *p;//指向新建结点 node *head;//头指针 head=NULL; p=head; int x; cin>>x;  while(x!=-1)  {  p=new node;  p->d=x;  p->next=head;

采用头插插法和尾插法建立单项链表

PS: 来源2014年数据结构联考复习指导 Page27. #include <iostream> #include <stdio.h> #include <stdlib.h> using namespace std; const int END_INPUT = -1; typedef struct LNode { int data; struct LNode *next; }LNode, *LinkList; LinkList CreatList1(LinkList

单链表的初始化,建立,插入,查找,删除。

#include <stdio.h> #include <stdlib.h> typedef int ElemType; //定义结点类型 typedef struct Node { ElemType data;              //单链表中的数据域 struct Node *next;          //单链表的指针域 }Node,*LinkedList; //单链表的初始化 LinkedList LinkedListInit() { Node *L; L = (N

对于&quot;单链表逆置和递归&quot;的问题的理解.

一. 相关知识要点: 学习或了解基础数据结构和C语言, 对基础链表知识或相关知识有概况性认识. 例如: 本题目结构为: 1 #define elem_type int 2 3 typedef struct _single_list { 4 elem_type data; //所存的数据元素 5 _single_list *next; //所存的指针元素 6 }ListNode; 二. 问题的思考过程(本题以3种不同的方法解决): <1>类似于我们学习的C语言基础知识中的冒泡排序(参考C程序设计

动态单链表的传统存储方式和10种常见操作-C语言实现

顺序线性表的优点:方便存取(随机的),特点是物理位置和逻辑为主都是连续的(相邻).但是也有不足,比如:前面的插入和删除算法,需要移动大量元素,浪费时间,那么链式线性表 (简称链表) 就能解决这个问题. 一般链表的存储方法 一组物理位置任意的存储单元来存放线性表的数据元素,当然物理位置可以连续,也可以不连续,或者离散的分配到内存中的任意位置上都是可以的.故链表的逻辑顺序和物理顺序不一定一样. 因为,链表的逻辑关系和物理关系没有必然联系,那么表示数据元素之间的逻辑映象就要使用指针,每一个存储数据元素