题目
【问题描述】创建链式线性表进行输入插入 寻找 删除 与 输出功能
【输入形式】
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;
}