1、创建一个长度为n的顺序表,顺序表的长度以及元素由用户输入。对该顺序表进行插入和删除,并输出插入和删除后的顺序表。
例:
输入线性表la的元素个数n:
5
请输入线性表la的n个元素:
1 2 3 4 5
顺序表为
0 1
1 2
2 3
3 4
4 5
请输入要插入的元素的位置和插入的值
3 7
插入后的顺序表为
0 1
1 2
2 7
3 3
4 4
5 5
请输入要删除的元素的位置
2
the dele data is 2
删除后的顺序表为
0 1
1 7
2 3
3 4
4 5
2、创建一个链表并进行初始化,对链表进行插入、删除、查找和更改。
例:
初始化链表为:
1 2 3 4
在第4的位置插入元素5:
1 2 3 5 4
删除元素3:
1 2 5 4
查找元素2的位置为:
元素2的位置为:2
更改第3的位置的数据为7:
1 2 7 4
#include <stdlib.h>
#include<iostream>
using namespace std;
#define ERROR 0
#define OK 1
typedef int Status;
typedef int ElemType;
typedef struct Node {
ElemType data;
struct Node* next;
}Node;
typedef struct Node* LinkList;
void CreateListTail(LinkList* L, int m[], int n) {
LinkList p, r;
int i;
*L = new Node;
r = *L;
for (i = 0;i < n;i++) {
p = new Node;
p->data = m[i];
r->next = p;
r = p;
}
r->next = NULL;
}
//获取元素位置的操作
Status GetElem(LinkList L, int i, int &e) {
int j = 1;
LinkList p;
p = L->next;
while (!(p->data==i)) {
p = p->next;
++j;
}
if (!p) {
cout << "查无此数!" << endl;
return ERROR;
}
e = j;
return OK;
}
//插入元素的操作
Status ListInsert(LinkList* L, int i, ElemType e) {
int j;
LinkList p, s;
p = *L;
j = 1;
while (p && j < i) {
p = p->next;
++j;
}
if (!p || j > i) {
return ERROR;
}
s = new Node;
s->data = e;
s->next = p->next;
p->next = s;
return OK;
}
//删除元素的操作
Status ListDelete(LinkList* L, int i) {
int j;
LinkList p, q;
p = *L;
j = 1;
while (p->next && j < i) {
p = p->next;
++j;
}
if (!(p->next) || j > i) {
return ERROR;
}
q = p->next;
p->next = q->next;
delete(q);
return OK;
}
//输出链表中的元素
Status Output(LinkList L) {
LinkList p;
p = L->next;
while (p) {
cout << p->data << endl;
p = p->next;
}
return OK;
}
//修改链表中的元素
Status change(LinkList &L, int e2, int e3)
{
LinkList p;
p = L->next;
for (int j = 0;j < e2-1;j++)
{
p = p->next;
}
if (!p)
{
return ERROR;
cout << "位置不合法!" << endl;
}
p->data = e3;
}
int main()
{
LinkList L;
int i, k, j, n, e, m[1000];
cout << "请输入元素个数" <<endl ;
cin >> n;
cout << "请输入各个元素的值" << endl;
for (i = 0;i < n;i++) {
cin >> m[i];
}
CreateListTail(&L, m, n);
cout << "创建的链表为:" << endl;
Output(L);
cout << "请输入要查找的元素" << endl;
cin >> j;
GetElem(L, j, e);
cout << "要查找的元素位于第" << e << "位" << endl;
cout << "请输入在第k个元素前插入一个元素e1:" << endl;
int e1;
cin >> k;
cin >> e1;
ListInsert(&L, k, e1);
cout << "此时链表的各元素如下" << endl;
Output(L);
cout << "请输入要删除链表中的第几个元素:" << endl;
int l;
cin >> l;
ListDelete(&L, l);
cout << "此时链表的各元素如下:" << endl;
Output(L);
cout << "请输入要更改元素的位置及内容" << endl;
int e2, e3;
cin >> e2;
cin >> e3;
change(L, e2, e3);
cout << "修改后的线性表如下:" << endl;
Output(L);
return 0;
}
3、删除线性表相同的元素。
input 10 element:
1 2 3 4 5 6 5 4 3 2
删除前:
1 2 3 4 5 6 5 4 3 2
删除后:
1 2 3 4 5 6
#include<stdio.h>
#include<stdlib.h>
int main()
{
void deletesame(int array[]);
int array[] = {1,2,3,4,3,5,3,6};
deletesame(array);
return 0;
}
void deletesame(int array[])
{
printf("未排序之前的线性表为:");
for (int i = 0;i < 8;i++)
{
printf("%d", array[i]);
}
printf("\n");
int arrayflag[8] = {0};
int k = 0;
for (int i = 0;i<8;i++)
{
arrayflag[array[i]] = array[i];
}
for (int j = 0;j < 8; j++)
{
if (arrayflag[j] != 0)
array[k++] = arrayflag[j];
}
printf("排序的线性表为:");
for (int i = 0;i < 6;i++)
{
printf("%d", array[i]);
}
}