#include
#include
typedef int ElemType;
typedef int Status;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void CreateList_L(LinkList &L, int n)
{
LinkList p;
//逆向输入n个元素的值
L = (LinkList)malloc(sizeof(LNode));
//建立一个带头结点的单链表
L->next = NULL;
for (int i = n; i>0; --i)
{
//生成新的结点
p = (LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
////printf("%d ",p->data);
p->next = L->next;
L->next = p;
}
}
Status LinkInsert_L(LinkList&L, int i, ElemType e)
{
//在带头结点的单链线性表L中第i个位置之前插入元素e
LinkList p = L;
LinkList s;
int j = 0;
//在带头结点的单链表L中第i个元素之前插入元素e
while (p&&j {
p = p->next;
++j;
}
//如果i小于1或者大于表长加1,则返回ERROR
if (!p || j>i - 1)
{
printf("ERROR\n");
return 0;
}
s = (LinkList)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
return 1;
}
Status LinkDelete_L(LinkList&L, int i, ElemType &e)
{
//在带头结点的单链线性表L中,删除第i个元素,并由e返回其值
LinkList p = L;
int j = 0;
while (p->next&&j < i - 1)
{
//寻找第i个结点,并令p指向其前趋
p = p->next;
++j;
}
if (!p->next || j>i - 1)
{
printf("ERROR\n");
return 0;
}
LinkList q;
q = p->next;
p->next = q->next;
e = q->data;
free(q);
return 1;
}
int main()
{
LinkList w;
int n;
printf("请输入n的值:");
scanf("%d", &n);
//创建一个单链表
printf("请逆序输入元素:");
CreateList_L(w, n);
ElemType e;
LinkList y = w;
////printf("%d ",y->next->data);
for (int i = 0; i < n; i++)
{
y=y->next;
printf("%5d",y->data);
}
printf("\n");
int z;
int x;
printf("请输入要插入位置:");
scanf("%d", &z);
printf("请输入要插入元素:");
scanf("%d", &x);
if(LinkInsert_L(w, z, x))
{
printf("元素%d已插入\n",x);
n++;
}
else
printf("插入失败\n");
y = w;
for (int j = 0; j < n; j++)
{
y = y->next;
e = y->data;
printf("%5d", e);
}
printf("\n");
int r;
int t;
printf("请输入要删除位置:");
scanf("%d", &r);
if(LinkDelete_L(w, r, t))
{
printf("元素%d已删除\n",t);
n--;
}
else
printf("删除失败\n");
y = w;
for (int h = 0; h < n; h++)
{
y = y->next;
e = y->data;
printf("%5d", e);
}
printf("\n");
return 0;
}
C语言的数组概念的学习,通过for循环输出打印数组
完整题目发过来