⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xianxinglianbiao.cpp

📁 This is a comparison foundation construction of data example code, the function is quite complete, w
💻 CPP
字号:
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
typedef int DataType;
typedef struct Node
{
	DataType data;
	struct Node *next;
}SLNode;

void ListInitiate(SLNode **head)
{/*如果有内存空间,申请头结点并使头指针head指向头结点*/
	if((*head=(SLNode *)malloc(sizeof(SLNode)))==NULL)
		exit(1);
	(*head)->next=NULL;                 //置链尾标记NULL
}

int ListLength(SLNode *head)
{
	SLNode *p=head;                     //P指向首元结点
	int size=0;
	while(p->next != NULL)              //循环计数
	{
		p=p->next;
		size++;
	}
	return size;
}

int ListInsert(SLNode *head,int i,DataType x)
{/*在代都结点的单链表head的数据元素ai节点前插入一个存放数据元素x的结点*/
	SLNode *p,*q;
	int j=-1;
	p=head;                            //P指向首元结点
	while(p->next !=NULL && j<i-1)
	{//最终让指针p指向数据元素ai-1结点
		p=p->next;
		j++;
	}
	if(j!=i-1)
	{
		printf("插入位置参数错误\n");
		return 0;
	}
	//生成新结点由指针q指示
	if((q=(SLNode *)malloc(sizeof(SLNode)))==NULL)
        exit(1);
	q->data=x;
	q->next=p->next;                 //给指针q->next赋值
	p->next=q;                       //给指针q->next重新赋值
	return 1;
}

int ListDelete(SLNode *head,int i,DataType *x)
{/*删除带头结点的单链表head的数据元素ai结点*/
/*删除结点的数据元素域由x带回。删除成功返回1,失败返回0*/
	SLNode *p,*s;
	int j=-1;
	p=head;                         //P指向首元结点
	while(p->next != NULL && p->next->next != NULL && j<i-1)
	{//最终让指针p指向数据元素ai-1结点
		p=p->next;
		j++;
	}
	if(j!=i-1)
	{
		printf("插入位置参数错\n");
		return 0;
	}
	s=p->next;                     //指针s指向数据元素ai结点
	*x=s->data;                    //把指针s所指结点的数据元素域值赋予x
	p->next=p->next->next;         //把数据元素ai结点从单链表中删除
	free(s);                       //释放指针s所指结点的内存空间
	return 1;
}

int ListGet(SLNode *head,int i,DataType *x)
{//取数据元素ai和删除函数类同,只是不删除数据元素ai结点
	SLNode *p;
	int j=-1;
	p=head;
	while(p->next != NULL && j<i)
	{
		p=p->next;
		j++;
	}
	if(j!=i)
	{
		printf("取元素位置参数错\n");
		return 0;
	}
	*x=p->data;
	return 1;
}

void Destroy(SLNode **head)
{
	SLNode *p,*p1;
    p=*head;
	while(p!=NULL)
    {
		p1=p;
		p=p->next;
		free(p1);
	}
	*head=NULL;
}

void main(void)
{	
	SLNode *head;
	int i,x;
	ListInitiate(&head);
	for(i=0;i<10;i++)
	{
		if(ListInsert(head,i,i+1)==0)         //插入10个数据元素
		{
			printf("错误\n");
			return ;
		}
	}
	if(ListDelete(head,4,&x)==0)             //删除数据元素5
	{
		printf("error\n");
		return;
	}
	for(i=0;i<ListLength(head);i++)
	{
		if(ListGet(head,i,&x)==0)            //取元素
		{
			printf("错误\n");
			return ;
		}
		else 
			printf("%d,",x);//显示数据元素
	}
	Destroy(&head);
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -