线性表中顺序表的基本操作(创建,插入,删除,输出)和单链表的基本操作(创建,删除,输出)

单链表:(使用了引用,要在c++上运行)
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100//最大长度
typedef struct//创建
{
int* i;
int length;
}sqlist;
bool newsqlist(sqlist& L)
{
L.i = (int*)(malloc)(sizeof(int[MAXSIZE]));//申请空间
if (!L.i)
{
return false;
}
else
{
L.length = 0;//注意不能遗漏
return true;
}
}
bool Insert(sqlist& L, int i, int j)//i为地址,j为元素
{
if (i<1 || i>L.length + 1)
{
return false;
}//地址错误
if (L.length >= MAXSIZE)//空间不足
return false;
for (int j = L.length - 1; j >= i - 1; j–)//将插入点之后的所有元素向后移动一个单位
{
L.i[j + 1] = L.i[j];
}
L.i[i - 1] = j;//将原来的元素覆盖
L.length++;
return true;
}
bool Get(sqlist L, int i,int &e)//i为地址,j为元素,&表示引用
{
if (i<1 || i>L.length + 1)
return false;
e = L.i[i - 1];//地址从1开始,下标从零开始,故减一
return true;
}
bool deletem(sqlist& L, int i)
{
if (i<1 || i>L.length + 1)
return false;
else
{
for (int j = i; j < L.length; j++)
{
L.i[j - 1] = L.i[j];
}
L.length–;
}
return true;
}
int locate(sqlist L, int i)
{
for (int j = 0; j < L.length;j++)
{
if (L.i[j] == i)
{
return j + 1;
}
}
return 0;
}
int main()
{
sqlist L;
int l, e, p;
if (!newsqlist(L))
printf(“new sqlist failed\n”);
else
{
printf(“new sqlist ready\n”);
printf(“input the length\n”);
scanf_s("%d", &l);
printf(“input the data:\n”);
for (int i = 1; i <= l; i++)
{
scanf_s("%d", &e);
Insert(L, i, e);
}
printf(“the sqlist is\n”);
for (int i = 1; i <= L.length; i++)
{
Get(L, i, e);
printf("%d", e);
}
printf(“input the location to delete:\n”);
scanf_s("%d", &l);
deletem(L, l);
for (int i = 1; i <= L.length; i++)
{
Get(L, i, e);
printf("%d “, e);
}
printf(”\n input the elem to locate\n");
scanf_s("%d", &e);
p = locate(L, e);
if (!p)
{
printf(“error”);
}
else
{
printf("%d", p);
}
}
return 0;
}
单链表:
#include<stdio.h>
#include<stdlib.h>
struct ListNode {
int data;
struct ListNode* next;``
};
struct ListNode* readlist();
void print(struct ListNode* l);
struct ListNode* deletem(int i, struct ListNode* j);
int main()
{
struct ListNode* l = readlist();
int i;
scanf_s("%d", &i);
l = deletem(i, l);
return 0;
}
struct ListNode* readlist()
{
struct ListNode* head, * tail, * p;
head = NULL;
tail = NULL;
while (1)
{
p = (struct ListNode*)(malloc(sizeof(struct ListNode)));
scanf_s("%d", &p->data);
if (p->data == -1)
break;
p->next = NULL;
}
}

猜你喜欢

转载自blog.csdn.net/weixin_51235620/article/details/114672849