线性表操作
顺序表是我们数据结构中的基本储存形式,现在给定一个顺序表,有如下操作:
Insert X Y:在顺序表中X位置插入Y元素,遍历输出当前顺序表的所有元素。
Delete X:删除顺序表中的X元素,如果有多个X元素,只删除第一个X,遍历输出当前顺序的所有元素。
Locate X:输出顺序表中X元素的所在的位置,如果有多个X元素,只输出第一个X元素的位置。
GetElem X:输出顺序表中X位置上的元素。
代码如下:
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
typedef struct node //定义一个结构体
{
int data;
struct node *next;
}node, *lk;
void init(lk *l) //定义一个链表头节点
{
(*l) = (lk)malloc(sizeof(node));
(*l)->next = NULL;
}
void creat(lk l,int n) //创建一个链表
{
int a;
lk tmp, p;
tmp = l;
int i;
for(i = 0;i < n;i++)
{
p = (lk)malloc(sizeof(node));
scanf("%d", &a);
p->data = a;
p->next = NULL;
tmp->next = p;
tmp = p;
}
}
void insert(lk l,int n, int m) //Insert X Y:在顺序表中X位置插入Y元素,遍历输出当前顺序表的所有元素。
{
lk p, q;
p = l;
int i;
for(i = 0;i < n-1;i++)
{
p = p->next;
}
q = (lk)malloc(sizeof(node));
q->data = m;
q->next = p->next;
p->next = q;
}
void show(lk l) //打印链表
{
int flag = 1;
lk p;
p = l;
p = p->next;
while(p)
{
if(flag)
{
printf("%d", p->data);
flag = 0;
}
else{
printf(" %d", p->data);
}
p = p->next;
}
printf("\n");
}
int GetElem(lk l, int n) //GetElem X:输出顺序表中X位置上的元素。
{
int i;
for(i = 0;i < n;i++)
{
l = l->next;
}
return l->data;
}
int Delete (lk l, int n) //Delete X:删除顺序表中的X元素,如果有多个X元素,只删除第一个X,遍历输出当前顺序的所有元素。
{
lk p ,q,s;
p = l;
q = l->next;
int i = 0;
while(q)
{
if(q->data==n)
{
p->next = q->next;
//s = q;
q= q->next;
i = 1;
break;
}
else
{
p = p->next;
q = q->next;
}
}
return i;
}
int Locate(lk l,int n) Locate X:输出顺序表中X元素的所在的位置,如果有多个X元素,只输出第一个X元素的位置。
{
int q = 0;
while(1)
{
l = l->next;
q++;
if(l->data == n)
{
break;
}
}
return q;
}
int main()
{
int m , n;
scanf("%d %d", &m, &n);
lk l;
init(&l);
creat(l, m);
int k;
char a[10];
int x,y,rt;
for(k = 0;k < n;k++)
{
scanf("%s", &a);
if(a[0] == 'I')
{
scanf("%d %d", &x, &y);
if(x > m)
{
printf("Wrong Input!\n");
}
else
{
insert(l,x,y);
show(l);
}
}
else if(a[0] == 'D')
{
scanf("%d", &x);
if(Delete(l,x) == 0)
{
printf("Wrong Input!\n");
}
else
{
Delete(l,x);
show(l);
}
}
else if(a[0] == 'L')
{
scanf("%d", &x);
if(x > m)
{
printf("Wrong Input!\n");
}
else
{
rt = Locate(l,x);
printf("%d\n", rt);
}
}
else if(a[0] == 'G')
{
scanf("%d", &x);
if(x > m)
{
printf("Wrong Input!\n");
}
else
{
rt = GetElem(l,x);
printf("%d\n", rt);
}
}
else
{
printf("%d\n", rt);
}
}
return 0;
}
结果展示: