线性表 链式结构

文章介绍了如何使用C语言创建链式线性表,包括初始化、创建列表、插入元素在指定位置以及删除指定元素的功能,并提供了相应的函数和样例输入/输出。
摘要由CSDN通过智能技术生成

题目

【问题描述】创建链式线性表进行输入插入 寻找 删除 与 输出功能
【输入形式】 1 输入元素个数 2 输入数据 3 插入位置与插入元素 4 输入删除要删除的元素
【输出形式】输出线性表
【样例输入】
        5 //输入元素个数
        1 2 3 4 5 //输入数据
        3 6 //插入位置与插入元素 如果插入位置不在范围内则不插入继续运行
        4 // 输入删除要删除的元素
【样例输出】
        1 2 6 3 5
#include<stdio.h>
#include<stdlib.h>

typedef struct Node
{
	int data;
	struct Node*next;
 } Node,*LinkList;
 
void InitList(LinkList *L)
{
	*L=(LinkList)malloc(sizeof(Node));
	(*L)->next=NULL;
}

LinkList CreateList(LinkList *L,int a[],int n)
{
	Node*p=*L;
	for(int i=0;i<n;i++)
	{
		Node*q=(LinkList)malloc(sizeof(Node));
		q->data=a[i];
		q->next=p->next;
		p->next=q;
		p=q;
	}
	return *L;
}

bool InsertList(LinkList *L,int position,int elem,int n)
{
	Node*p=*L;
	if(position<1||position>n)
		return -1;
	Node*temp=(LinkList)malloc(sizeof(Node));
	for(int i=0;i<position-1;i++)
	{
		p=p->next;
	}
	temp->data=elem;
	temp->next=p->next;
	p->next=temp;
	
	return 1;	 
}

void DelList(LinkList *L,int elem)
{
	Node*p=*L;
	while(p->next->data!=elem && p->next!=NULL)
	{	
		p=p->next;
	}
	Node *temp=(LinkList)malloc(sizeof(Node));
	//temp->next=p->next;
	temp=p->next;
	p->next=temp->next;
	free(temp);
	return;	
}
void PrintList(LinkList *L)
{
	Node*p=(*L)->next;
	while(p!=NULL)
	{
		printf("%d",p->data);
		p=p->next;
	}
	printf("\n");
}

int main()
{
	int n;
	int a[100];
	scanf("%d",&n);
	for(int i=0;i<n;i++)
		scanf("%d",&a[i]);
	LinkList L;
	InitList(&L);
	CreateList(&L,a,n);
	int position,elem;
	scanf("%d %d",&position,&elem);
	InsertList(&L,position,elem, n);
	scanf("%d",&elem);
	DelList(&L, elem);
	PrintList(&L);
	return 0;
}

数组方法

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

int main()
{
	int a[100];
	int n=0;
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	
	int p,e,d;
	scanf("%d %d",&p,&e);
	if(p>0 && p<n)
	{
		for(int j=n;j>=p;j--)
			a[j]=a[j-1];
		a[p-1]=e;
	}
	
	scanf("%d",&d);
	int j=0;
	for(int i=0;i<n+1;i++)
	{
		if(a[i]!=d)
			j++;
		else
			break;
	}
	for(int i=j;i<n+1;i++)
	{
		a[i]=a[i+1];
	}
		
	for(int i=0;i<n;i++)
	{
		printf("%d ",a[i]);
	}
	return 0;
 } 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值