顺序存储结构
// An highlighted block
#include<stdio.h>
#include<stdlib.h>
#define ListInitSize 10
#define ListIncrement 10
typedef struct{
int *base;
int length;
int listsize;
}SqList;
void InitSqList(SqList &L){
L.base=(int*)malloc(ListInitSize*sizeof(int));
if(!L.base)
exit(0);
L.listsize = ListInitSize;
printf("请输入线性表长度:\n");
scanf("%d",&L.length);
printf("请输入%d个整形元素:\n",L.length);
for(int i=0;i<L.length;i++)
scanf("%d",&L.base[i]);
}
void TraversalList(SqList &L){
printf("**********遍历线性表*************\n");
for(int i=0;i<L.length;i++)
printf("%3d",L.base[i]);
printf("\n");
}
void LocateElem(SqList &L,int &e){
int i = 0;
while(i<L.length){
if(L.base[i] == e){
printf("元素%d在线性表中是第%d位\n",e,i+1);
break;
}
else
i++;
}
if(i >= L.length)
printf("查找失败\n");
}
void ListInsert(SqList &L,int &i,int &e){
if(i<1||i>L.length+1){
printf("输入i值非法。\n");
exit(0);
}
if(L.length>=L.listsize){
int *newbase = (int*)realloc(L.base,L.listsize+ListIncrement*sizeof(int));
if(!newbase)
exit(0);
}
for(int j=L.length-1;j>=i-1;j--)
L.base[j+1] = L.base[j];
L.base[i-1] = e;
L.length++;
}
void ListDelete(SqList &L,int i,int &e){
if(i<1||i>L.length+1){
printf("输入i值非法。");
exit(0);
}
e = L.base[i-1];
printf("删除元素的值为:%d\n",e);
for(int j=i;j<L.length;j++)
L.base[j-1] = L.base[j];
L.length--;
}
int main(){
SqList L;
int i,e;
InitSqList(L);
TraversalList(L);
printf("请输入需要查找的元素:\n");
scanf("%d",&e);
LocateElem(L,e);
printf("请输入需要插入的元素和想插入的位置:\n");
scanf("%d%d",&e,&i);
ListInsert(L,i,e);
TraversalList(L);
printf("请输入要删除的元素位置:\n");
scanf("%d",&i);
ListDelete(L,i,e);
TraversalList(L);
return 0;
}
链式存储结构``
#include<stdio.h>
#include<stdlib.h>
#define ListInitSize 100
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
void CreatList(LinkList &L, int &n){
L = (LinkList)malloc(sizeof(LNode));
LinkList pre = L;
printf("请输入%d个整形元素:\n",n);
for(int i=0;i<n;i++){
LinkList p = (LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
pre->next = p;
pre = p;
}
pre->next = NULL;
}
void TraversalList(LinkList &L){
LinkList p = L->next;
printf("**********遍历线性表*************\n");
while(p){
printf("%3d",p->data);
p = p->next;
}
printf("\n");
}
void LocateElem(LinkList &L,int &e){
int i = 0;
LinkList p = L->next;
while(p&&p->data != e){
i++;
p = p->next;
}
if(p)
printf("元素%d在线性表中是第%d位\n",e,i+1);
else
printf("查找失败\n");
}
void ListInsert(LinkList &L,int &i,int &e){
int j = 0;
LinkList p = L;
while(p&&j<i-1){
j++;
p = p->next;
}
if(!p||j>i-1){
printf("输入i值非法\n");
exit(0);
}
LinkList s = (LinkList)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
}
void ListDelete(LinkList &L,int i,int &e){
int j = 0;
LinkList p =L;
while(p->next&&j<i-1){
j++;
p = p->next;
}
if(!(p->next)||j>i-1){
printf("输入i值非法\n");
exit(0);
}
LinkList s = (LinkList)malloc(sizeof(LNode));
s = p->next;
p->next = s->next;
e = s->data;
printf("删除元素的值为:%d\n",e);
free(s);
}
int main(){
LinkList L;int n,e,i;
printf("请输入线性表长度:\n");
scanf("%d",&n);
CreatList(L,n);
TraversalList(L);
printf("请输入想要查找元素:\n");
scanf("%d",&e);
LocateElem(L,e);
printf("请输入需要插入的元素和想插入的位置:\n");
scanf("%d%d",&e,&i);
ListInsert(L,i,e);
TraversalList(L);
printf("请输入要删除的元素位置:\n");
scanf("%d",&i);
ListDelete(L,i,e);
TraversalList(L);
return 0;
}
转载:https://blog.csdn.net/weixin_45087775/article/details/101832083
查看评论