#include<stdio.h>
#include<stdlib.h>
typedef int Az;
typedef struct man {
int data;
struct man size;
}List;
int main()
{List createList();
struct man createNode();
List find(List l,int x);
List insert(List l,int x,int i);
Az cha(List l,int p);
bool ListDelete_L(List L,int i,int e);
int len(List l);
List k,t;
int e;
int v,m,s,n,h,y,i,f,b;
createList();
k=createNode();
t=k;
printf("你想进行什么操作?");
printf("增输入2,删输入3,检输入4,查输入5,结束输入0");
scanf("%d",&v);
while(v)
{
if(v==2)
{printf("请输入你要插入的数字:");
scanf("%d",&n);
printf("请输入你要插入的位置:");
scanf("%d",&h);
insert(k,n,h);
}
if(v==3)
{printf("请输入你要删除的位置:");
scanf("%d",&y);
for(i=0;i<=y;i++)
t=t->size;
ListDelete_L (k,y,t->data);
}
if(v==4)
{printf("请输入你要查询的数字:");
scanf("%d",&m);
find(k,m);
}
if(v==5)
{printf("请输入你要查询的位置:");
scanf("%d",&m);
cha(k,m) ;
}
printf("请再次输入数字:");
scanf("%d",&v);
for(e=0;e<=99;e++)
{t=k;
printf(" %d",t->data);
t=t->size;
}}
printf("该列表的长度为:%d",len(k));
return 0;
}
List createList()
{struct man headNode;
headNode = (struct man*)malloc(sizeof(struct man));
headNode->size = NULL;
return headNode;
}
struct man* createNode()
{int i;
struct man* newNode = (struct man*)malloc(sizeof(struct man));
for(i=0;i<=99;i++)
{
newNode->data = i;
newNode=newNode->size;
}
newNode->size = NULL;
return newNode;
}
int len(List l)
{
List p;
int cut=0;
p=l;
while(p)
{p=p->size;
cut++;
}
return cut;
}
List find(List l,int x)
{int i;
List p=l;
for(i=0;i<=99;i++)
{
if(p&&p->data!=x) p=p->size;}
if(p) return p;
else return NULL;
}
Az cha(List l,int p)
{List m;
int cnt=1;
m=l;
while(m&&cnt<p){
m=m->size;
cnt++;
}
if((cnt==p)&&m)
return m->data;
else return -1;
}
List insert(List l,int x,int i)
{
List tmp,pre;
tmp=(List)malloc(sizeof(struct man));
tmp->data=x;
if(i==1){
tmp->size=l;
return tmp;
}
else{
int cnt=1;
pre=l;
while(pre&&cnt<i-1)
{
pre=pre->size;
cnt++;
}
if(pre==NULL||cnt!=i-1)
{
printf("插入参数错误");
free(tmp);
return NULL;
}
else {
tmp->size=pre->size;
pre->size=tmp;
return l;
}
}
}
bool ListDelete_L (List L,int i,int e)
{ int j;
List p,q;
p=L ;
j=0;
while (p->size && j<i-1)
{
p=p->size;
j++;
}
if (!(p->size)||j>i-1)
return false;
else {
q=p->size;
e=q->data;
p->size=q->size;
free(q);
return true;
}
}
修改如下,供参考:
#include<stdio.h>
#include<stdlib.h>
typedef int Az;
typedef struct man {
int data;
struct man* size;
}List;
int main()
{
List* createList();
struct man* createNode();
List* find(List* l, int x);
List* insert(List* l, int x, int i);
Az cha(List* l, int p);
List* ListDelete_L(List * L, int i, int* e);
int len(List* l);
List *k, *t;
int e;
int v, m, s, n, h, y, i, f, b;
k = createList();
k->size = createNode();
t = k;
printf("你想进行什么操作?");
printf("增输入2, 删输入3, 按数字检输入4, 按位置查输入5, 结束输入0\n");
scanf("%d", &v);
while (v)
{
if (v == 2)
{
printf("请输入你要插入的数字:");
scanf("%d", &n);
printf("请输入你要插入的位置:");
scanf("%d", &h);
k = insert(k, n, h);
}
if (v == 3)
{
printf("请输入你要删除的位置:");
scanf("%d", &y);
//for (i = 0; i <= y; i++)
// t = t->size;
k = ListDelete_L(k, y, &e);
if (e < 0)
printf("删除未成功\n");
else
printf("删除数:%d\n", e);
}
if (v == 4)
{
printf("请输入你要查询的数字:");
scanf("%d", &m);
t = find(k, m);
if (!t)
printf("未找到查询的数字.\n");
else
printf("%d\n", t->data);
}
if (v == 5)
{
printf("请输入你要查询的位置:");
scanf("%d", &m);
e = cha(k, m);
if (e < 0)
printf("未找到查询的位置\n");
else
printf("%d\n", e);
}
t = k;
while(t->size)
{
printf(" %d", t->size->data);
t = t->size;
}
printf("\n请再次输入数字:");
scanf("%d", &v);
}
printf("该列表的长度为:%d", len(k));
return 0;
}
List *createList()
{
struct man *headNode;
headNode = (struct man*)malloc(sizeof(struct man));
headNode->size = NULL;
return headNode;
}
struct man* createNode()
{
int i;
struct man* p = NULL, * q = NULL;
for (i = 0; i <= 99; i++)
{
struct man* newNode = (struct man*)malloc(sizeof(struct man));
newNode->data = i;
newNode->size = NULL;
if (p == NULL)
p = newNode;
else
q->size = newNode;
q = newNode;
}
return p;
}
int len(List* l)
{
List* p;
int cut = 0;
p = l;
while (p->size)
{
p = p->size;
cut++;
}
return cut;
}
List* find(List* l, int x)
{
int i;
List* p = l;
while (p->size && p->size->data != x) p = p->size;
if (p->size)
return p->size;
else
return NULL;
}
Az cha(List* l, int p)
{
List* m;
int cnt = 0;
m = l;
while (m->size && cnt < p) {
m = m->size;
cnt++;
}
if (cnt == p)
return m->data;
else
return -1;
}
List* insert(List* l, int x, int i)
{
List *tmp, *pre;
tmp = (List*)malloc(sizeof(struct man));
tmp->data = x;
if (i <= 1) {
tmp->size = l->size;
l->size = tmp;
//return tmp;
}
else {
int cnt = 0;
pre = l;
while (pre->size && cnt < i)
{
pre = pre->size;
cnt++;
}
if (pre == NULL || cnt != i)
{
printf("插入参数错误\n");
free(tmp);
//return NULL;
}
else {
tmp->size = pre->size;
pre->size = tmp;
//return l;
}
}
return l;
}
List* ListDelete_L(List* L, int i, int *e)
{
List* tmp, * pre;
if (i <= 1) {
tmp = L->size;
(*e) = tmp->data;
L->size = tmp->size;
free(tmp);
}
else {
int cnt = 1;
pre = L;
while (pre->size && cnt < i)
{
pre = pre->size;
cnt++;
}
if (pre->size == NULL)
{
printf("删除参数错误\n");
(*e) = -1;
}
else {
tmp = pre->size;
(*e) = tmp->data;
pre->size = tmp->size;
free(tmp);
}
}
return L;
}