当前位置:首页 » 编程语言 » 带结点的c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

带结点的c语言

发布时间: 2022-06-01 07:24:38

1. c语言带头节点与不带头节点有什么区别

带头节点,对第一个节点及其后的节点都可以一样看待,任何操作都可以用相同的方法。
不带头节点,对第一个节点的操作就要区别对待,比如删除了第一个节点,第二个就作为第一个,头指针就要修改指向第二个节点。带了头结点,头指针一直指向头结点。

2. C语言中结点是什么

1、在数据结构的图形表示中,对于数据集合中的每一个数据元素用中间标有元素值的方框表示,一般称之为数据结点,简称结
点。在C语言中,链表中每一个元素称为“结点”,每个结点都应包括两个部分:一为用户需要用的实际数据;二为下一个结点的地址,即指针域和数据域。数据结构中的每一个数据结点对应于一个储存单元,这种储存单元称为储存结点,也可简称结点。

2、举例说明如下:
1)对于线性表存储结构:
1, 2, 3, 4, 5, ......, k, k+1, .......
则结点k+1的直接前驱结点为结点k

2)对于链表存储结构
// 结点的定义
struct node
{
int data; // 数据域
struct node *next; // 指针域
};
struct node *Head; // Head表示链表的头结点,则Head->next为头结点Head的后继结点;Head为Head->next的前驱节点

3. C语言创建带头结点的链表

#include<stdio.h>
#include<stdlib.h>
#defineN8
typedefstructlist{
intdata;
structlist*next;
}SLIST;

SLIST*deletelist(SLIST*p,int*pvalue){
SLIST*q,*t;
q=p;
while(q->next){
if(q->next->data==*pvalue){
t=q->next;
q->next=t->next;
free(t);
break;
}
q=q->next;
}
returnp;
}

SLIST*creatlist(int*a){
SLIST*h,*p,*q;
inti;
h=p=(SLIST*)malloc(sizeof(SLIST));
for(i=0;i<N;i++){
q=(SLIST*)malloc(sizeof(SLIST));
q->data=a[i];
p->next=q;
p=q;
}
p->next=0;
returnh;
}

voidoutlist(SLIST*h){
/*这里输出链表中各个数据*/
SLIST*p=h->next;
while(p){
printf("%d",p->data);
p=p->next;
}
printf(" ");
}

intmain(void){
SLIST*head;
intnvalue,i;
inta[N];
printf("输入%d个整数: ");
for(i=0;i<N;i++){
scanf("%d",&a[i]);
}
head=creatlist(a);
outlist(head);
printf("要删除的数据:");
scanf("%d",&nvalue);//删除的结点数据
head=deletelist(head,&nvalue);
outlist(head);
return0;
}

4. 用c语言尾插法建立带头结点的单链表

EOF!=(scanf("%d",&x)是什么意思?把scanf("%d",&x)写在while语句的上面为什么不行?
这里是指输入成功的话,执行下面的大括号里面语句。
pre->next是指当前结点的前一个结点,这里用于交换位置的。你可以画个图来查看他们之间的联系,就会很清楚了

5. C语言 带头结点的单链表的各种操作

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

// 定义链表中的节点

typedef struct node

{

int member;

struct node *pNext;

}Node,*pNode;

pNode CreateList(int *); // 创建链表函数

void TraverseList(pNode ); // 遍历链表函数

void Insert_Node(pNode,int);

int Del_Node(pNode);



int main()

{

int a[10]={2,1,0,3,6,4,8,2,7,9};

int s[10]={2,5,4,6,3,1,8,7,9,0};

pNode pHead = NULL;

int data;

int num;

int choose;

int return_val;

pHead = CreateList(a);

Insert_Node(pHead,10);

TraverseList(pHead);

pHead = CreateList(s);

printf("删除数据%d ",Del_Node(pHead));

TraverseList(pHead);

return 0;

}

pNode CreateList(int *a)

{

int i; // 用于下面循环

int len=10; // 用来存放有效节点的字数

int val; // 用于临时存放用户输入的数据

pNode pHead = (pNode)malloc(sizeof(Node)); // 分配一个不存放有效数据的头结点

pNode pTail = pHead; // 链表的最后一个节点

pTail->pNext = NULL; // 最后一个节点的指针置为空

for(i = 0; i < len; i++)

{

pNode pNew = (pNode)malloc(sizeof(Node)); // 为节点分配空间

pNew->member = a[i];; //将用户输入的数据赋给节点的成员

pTail->pNext = pNew; //将最后一个节点的指针指向下一个新的节点

pNew->pNext = NULL; //将新节点中的指针置为空

pTail = pNew; //将新节点赋给最后的一个节点

}

return pHead; //返回头节点

}

// 遍历链表函数

void TraverseList(pNode pHead)

{

pNode p = pHead->pNext; //将头节点的指针给予临时节点p

while(NULL != p) //节点p不为空,循环

{

printf("%d ",p->member);

p = p->pNext;

}

printf(" ");

return ;

}

void Insert_Node(pNode pHead,int data)

{

int i = 0;

pNode _node = pHead,nex,pNew;

while (1)

{

_node = _node->pNext;

++i;

if(i==5) break;

}

pNew = (pNode)malloc(sizeof(Node));

nex=_node->pNext;

pNew->member = data; // 把输入的数据赋给要插入的节点

_node->pNext = pNew; // 把要插入的节点的地址,给上个节点的指针域

pNew->pNext = nex;

}

// 删除链表节点函数

int Del_Node(pNode pHead)

{

int i = 0;

int data;

pNode _node = pHead;

pNode pSwap;

while(1)

{

_node = _node->pNext;

++i;

if(i==4) break;

}

pSwap = _node->pNext;

data = pSwap->member;

_node->pNext = _node->pNext->pNext;

free(pSwap);

return data;

}

6. 求数据结构(C语言)带头结点的单链表 节点的插入

我给你说下大概思路:
1、在p之前插入结点,首先要找到p前一个结点的位置,假设用pos指向p前一个结点的位置,然后申请结点newNode,让它的数据域为e,然后让newNode->next=pos->next,pos->next=newNode。
2、在p之后插入结点,同样申请结点,赋值为e,然后让NewNode->next=p->next,p->next=NewNode。

7. C语言建立带头结点的单链表

单链表的生成有2种方式:头插法和尾插法。

1、头插法

/*********************************************************************
*函数名称:linklist*CreateLinklistHead()
*函数功能:利用头插法创建链表
*参数:无
*返回值:创建完链表后的链表头结点
*说明:无
*********************************************************************/
externlinklist*CreateLinklistHead()
{
intx,i,nodeNum;
linklist*head,*temp;//头结点与临时结点
head=(linklist*)malloc(sizeof(linklist));//生成表头结点
head->next=NULL;//给表头结点的指针域赋值
printf("请输入链表中结点的个数:");
scanf("%d",&nodeNum);
for(i=1;i<=nodeNum;i++)
{
printf("请输入第%d个结点的数据:",i);
scanf("%d",&x);
temp=(linklist*)malloc(sizeof(linklist));//生成新的结点
temp->data=x;//对新结点的数据域赋值
//将新结点插到头结点之后
temp->next=head->next;
head->next=temp;
}
returnhead;//返回新建链表的头结点
}

2、尾插法

/*********************************************************************
*函数名称:linklist*CreateLinklistRear()
*函数功能:利用尾插法创建链表
*参数:无
*返回值:创建完链表后的链表头结点
*说明:无
*********************************************************************/
externlinklist*CreateLinklistRear()
{
intx,i,nodeNum;
linklist*head,*rear,*temp;//定义头结点、尾结点和临时结点
head=(linklist*)malloc(sizeof(linklist));//生成表头结点,表头结点不存放数据
head->next=NULL;//将表头结点的指针域赋值为NULL
rear=head;//将表头结点赋值给表尾结点
printf("请输入链表中结点的个数:");
scanf("%d",&nodeNum);
for(i=1;i<=nodeNum;i++)
{
printf("请输入第%d个结点的数据:",i);
scanf("%d",&x);
temp=(linklist*)malloc(sizeof(linklist));//生成新的结点
temp->data=x;//新增结点的数据域
temp->next=NULL;//新增结点的指针域(由于是尾插法,所以插入的结点都在尾部,即指针域为NULL)
rear->next=temp;//使前一个结点指向新增结点(head->next=temp)
rear=temp;//将新增结点赋值给尾结点(尾插法,插入的结点在尾部)(rear=head->next)
}
//rear->next=NULL;//将尾结点的指针域赋值为空(为了方便检验链表是否为空链表)
returnhead;//返回头结点
}

8. C语言 创建带头结点的链表

单链表的生成有2种方式:头插法和尾插法。
1、头插法
/*********************************************************************
* 函数名称:linklist *CreateLinklistHead()
* 函数功能:利用头插法创建链表
* 参 数:无
* 返 回 值:创建完链表后的链表头结点
* 说 明:无
*********************************************************************/
extern linklist *CreateLinklistHead()
{
int x, i, nodeNum;
linklist *head, *temp; // 头结点与临时结点
head = (linklist *)malloc(sizeof(linklist)); // 生成表头结点
head->next = NULL; // 给表头结点的指针域赋值
printf("请输入链表中结点的个数:");
scanf("%d", &nodeNum);
for(i=1; i<=nodeNum; i++)
{
printf("请输入第 %d 个结点的数据:", i);
scanf("%d", &x);
temp = (linklist *)malloc(sizeof(linklist)); // 生成新的结点
temp->data = x; // 对新结点的数据域赋值
// 将新结点插到头结点之后
temp->next = head->next;
head->next = temp;
}
return head; // 返回新建链表的头结点
}2、尾插法
/*********************************************************************
* 函数名称:linklist *CreateLinklistRear()
* 函数功能:利用尾插法创建链表
* 参 数:无
* 返 回 值:创建完链表后的链表头结点
* 说 明:无
*********************************************************************/
extern linklist *CreateLinklistRear()
{
int x, i, nodeNum;
linklist *head, *rear, *temp; // 定义头结点、尾结点和临时结点
head = (linklist *)malloc(sizeof(linklist)); // 生成表头结点,表头结点不存放数据
head->next = NULL; // 将表头结点的指针域赋值为NULL
rear = head; // 将表头结点赋值给表尾结点
printf("请输入链表中结点的个数:");
scanf("%d", &nodeNum);
for(i=1; i<=nodeNum; i++)
{
printf("请输入第 %d 个结点的数据:", i);
scanf("%d", &x);
temp = (linklist *)malloc(sizeof(linklist)); // 生成新的结点
temp->data = x; // 新增结点的数据域
temp->next = NULL; // 新增结点的指针域(由于是尾插法,所以插入的结点都在尾部,即指针域为NULL)
rear->next = temp; // 使前一个结点指向新增结点(head->next=temp)
rear = temp; // 将新增结点赋值给尾结点(尾插法,插入的结点在尾部)(rear=head->next)
}
//rear->next = NULL; // 将尾结点的指针域赋值为空(为了方便检验链表是否为空链表)
return head; // 返回头结点
}

9. 用c语言写带头结点链表分块的算法设计(大于5的值放入链表B,小于5的值放入链表C)

typedefine struct {
int value;
LinkList *next;
}LinkList;

void SblitList(LinkList *A, LinkList **B, LinkList **C)
{
while(A)
{
if(A->value > 5)
{
push(B, A->value);
}
else
push(C, A->value);
A = A->next;
}
}

10. 数据结构:用C语言:创建一个带结点的空链表,并输出。

#include<cstdio>
#include<cstdlib>

typedefstructpoi
{
charnum[10];
charname[20];
intage;
structpoi*next;
}pointer;

pointer*head,*tail;

pointer*newnode()
{
pointer*u=(pointer*)malloc(sizeof(pointer));//分配一个动态地址。这个函数要记下里。同时要开cstdlib头文件
u->next=NULL;
}

intmain()
{
head=newnode();//创建一个新的指针。
tail=head;
for(inti=1;i<=5;i++)
{
tail->next=newnode();
tail=tail->next;
//你可以输入数据然后存入指针中。比如scanf("%d",&tail->age);然后给tail->num什么的赋值。
}
pointer*u=head->next;
while(u!=NULL)
{
//输出什么东西。。。比如printf("%d ",u->age);
u=u->next;
}
return0;
}