#include"stdio.h"
#include"malloc.h"
typedef struct Node
{
int data;
Node *next;
}Node;
void InitNode(Node *&p)
{
p = (Node *)malloc(sizeof(Node));
p->next = NULL;
}
// 头插法建立单链表
void createfromhead(Node *p)
{
int n;
Node *q,*r;
r = p->next;
printf("create list, input -1 to end:");
scanf("%d",&n);
while(n != -1)
{
q = (Node *)malloc(sizeof(Node));
q->data = n;
q->next = r;
r = q;
p->next = r;
scanf("%d",&n);
}
}
// 尾插法建立单链表
void createfromtail(Node *p)
{
Node *q, *r;
r = p;
int n;
printf("create list, input -1 to end:");
scanf("%d",&n);
while(n != -1)
{
q = (Node *)malloc(sizeof(Node));
q->data = n;
q->next = NULL;
r->next = q;
r = q;
scanf("%d",&n);
}
}
void display(Node *p)
{
Node *q;
q = p->next;
printf("The List: ");
while(q != NULL)
{
printf("%d ",q->data);
q = q->next;
}
printf("\n");
}
int lengthNode(Node *p)
{
int n = 0;
Node *q;
q = p->next;
while(q != NULL)
{
++n;
q = q->next;
}
return n;
}
void deleteNode(Node *p, int n, int &x)
{
int length ;
length = lengthNode(p);
int k = 0;
Node *q,*r;
if(n<=0 || n> length)
{
printf("The position is not suitable!\n");
}
else{
q = p;
while( k != (n-1))
{
q = q->next;
++k;
}
r = q->next;
q->next = r->next;
x = r->data;
free(r);
}
}
int insertNode(Node *p,int position,int x)
{
if(position<1 || position>lengthNode(p))
{
printf("The position is not suitable, insert failed!\n");
return 0;
}
Node *r, *q;
r = p->next;
int n = 1;
while(n!= position-1)
{
++ n;
r = r->next;
}
q = (Node *)malloc(sizeof(Node));
q ->data = x;
q ->next = r->next;
r->next = q;
return 1;
}
void main()
{
Node *p;
InitNode(p);
createfromhead(p); // createfromtail(p);
display(p);
int x;
deleteNode(p,2,x);
printf("The delete Node is %d\n",x);
display(p);
insertNode(p,2,7);
display(p);
}
分享到:
相关推荐
利用 KMP 算法求子串在主串中出现的次数.c
假设以带头结点的循环链表表示一个队列,并且只设一个队尾指针指向尾元素结点(注意不设头指针),试写出相应的置空队、入队、出队的算法。(Java描述)
C++ 实验 包含3个文件reverse.cpp CirHSLinkedList.h Node.h
关键字:2个带头结点单链表+提取公共元素+二表合一 思路 二表合一:采用**“归并”的思想,设置两个工作指针pa和pb,对两个链表进行归并扫描,只有同时出现在两集合中的元素才链接到结果表**中, 这里是新A表。并且...
一个带头结点的单循环链表,结点类型为(data.next),以haed为头指针,每个结点的data域存放的是一个整数,试构造一个删除所有值大于min,小于max的结点的算法
无头结点的单链表的c算法的实现,里面有验证程序可以参考,在调试中通过。
带头结点的单链表类的定义及实现1.cpp .........
2.画出带头结点的单链表、带头结点的循环单链表(空和非空情况都考虑)。(10分) 3.在带头结点的单链表的第i(0≤i≤size)个结点前,插入一个存放数据元素x的结点,成功返回1,失败返回0,时间复杂度是多少? (10...
NULL 博文链接:https://bbwang8088.iteye.com/blog/2391835
和单链表相同,循环链表也有带头结点结构和不带头结点结构两种,带头结点的循环单链表实现插入和删除操作较为方便。 线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系...
数据结构-----单链表的操作------带头节点
内容:1、已知带头结点的动态单链表L中的结点是按整数值递增排序的,试写一算法将值为x的结点插入到表L中,使L仍然有序。 2、设计一算法,逆置带头结点的动态链表L。要求利用原表的结点空间,并要求用尽可能少的时间...
带头结点双链循环线性表是C经典数据结构算法,希望对大家学习有点用
要在一个带头结点的单向循环链表中删除头结点,得到一个新的不带头结点的单向循 环链表,若结点的指针域为next,头指针为head,尾指针为p,,则可执行head=head- > next; p->next=head。 5.在双向链表中,每个结点...
2.约瑟夫(Joseph)问题。具体描述是:编号为1,2,3,…,n的n个人按顺时针方向围坐一圈。...一开始任选一个正整数作为报数... 要求:利用不带头结点的循环单链表存储结构模拟此过程,按照出列的顺序输出各人的编号。
(1)建两个带头结点的循环单链表LA,LB单循环链表, (2)将两个循环单链表合并为一个循环单链表,其头指针为LA。 六)单链表应用 建立一个带头结点的线性链表,用以存放输入的二进制数,链表中每个结点的data域...
里面有带头结点的单链表、循环单链表、双循环链表的实现,在vs2010里面使用过,都可以运行
线性表存储结构(五选一):1、 带头结点的单链表2、 不带头结点的单链表3、 循环链表4、 双链表5、 静态链表线性表的基本功能:1、 构造:使用头插法、尾插法两种方法2、 插入:要求建立的链表按照关键字从小到大...
●建立一个带头结点的空单链表;●指定插入位置及元素值到单链表中;●随机插入5个元素到单链表的尾部;●指定删除元素位置(从1开始),从单链表中删除;●输入查找值,得到元素在单链表中位置;●清空销毁单链表;...
建立一个带头结点的空单链表 逐步演示插入指定元素值至指定位置 逐步演示随机插入 3 个节点至单链表的尾部 逐步演示从单链表中指定删除节点的位置进行删除 逐步演示输入查找值得到元素在单链表中的位置序号 销毁...