#include "stdio.h"
#include "stdlib.h"
typedef struct node
{ int data;
struct node *next;
}LNode,*LinkList;
LinkList Creat_LinkList()
{ int x;
LinkList H=(LinkList)malloc(sizeof(LNode));
H->next=NULL;
LNode *s ;
scanf("%d",&x);
while(x!=-1)
{ s=(LinkList)malloc(sizeof(LNode));
s->data=x;
s->next=H->next;
H->next=s;
scanf("%d",&x);
}
return H;
}
LinkList Get_LinkList(LinkList H,int k)
{ LNode *p=H;
int j=0;
while(p->next!=NULL&&j<k)
{ p=p->next; j++; }
if(j==k) return p;
else return NULL;
}
void Insert_LinkList(LinkList H,int i, int x)
{ LNode *p,*s;
p=Get_LinkList(H,i-1);
if (p==NULL)
{ printf("插入位置错误~!"); }
else
{ s=(LinkList)malloc(sizeof(LNode));
s->data=x;
s->next=p->next;
p->next=s;
}
}
void Del_LinkList(LinkList H,int i)
{ LinkList p,q;
p=Get_LinkList(H,i-1);
if(p==NULL)
{ printf("第i-1个节点不存在"); }
else
{ if(p->next==NULL)
{ printf("第i个节点不存在"); }
else
{q=p->next;
p->next=q->next;
free(q);
}
}
}
void Print_LinkList(LNode *L)
{ int i;
printf("线性表是:");
for( ;L!=NULL; )
{ printf("%d",L->data); L=L->next; }
}
void main()
{ int j=-1,i;
int x;
LNode *H;
H=Creat_LinkList( );
Print_LinkList(H->next);
while(j)
{ printf(" 请选择你的操作:");
printf("1:插入操作");
printf("2:删除操作");
printf("0:退出");
scanf("%d",&j);
switch(j)
{ case 0 : printf("没有操作,退出"); break;
case 1 : printf("请输入你要插入的数和位置:");
scanf("%d%d",&x,&i);
Insert_LinkList(H,i,x);
Print_LinkList(H->next);
break;
case 2 : printf("请输入你要删除的数的位置:");
scanf("%d",&i);
Del_LinkList(H, i);
Print_LinkList(H->next);
break;
default : printf("选择错误~!");
}
}
}
调试好了:
#include "stdio.h"
#include "stdlib.h"
typedef struct node
{ int data;
struct node *next;
}LNode,*LinkList;
LinkList Creat_LinkList()
{ int x;
LinkList H=(LinkList)malloc(sizeof(LNode));
H->next=NULL;
LNode *s ;
scanf("%d",&x);
while(x!=-1)
{ s=(LinkList)malloc(sizeof(LNode));
s->data=x;
s->next=H->next;
H->next=s;
scanf("%d",&x);
}
return H;
}
LinkList Get_LinkList(LinkList H,int k)
{ LNode *p=H;
int j=0;
while(p->next!=NULL&&j<k)
{ p=p->next; j++; }
if(j==k) return p;
else return NULL;
}
void Insert_LinkList(LinkList H,int i, int x)
{ LNode *p,*s;
p=Get_LinkList(H,i-1);
if (p==NULL)
{ printf("插入位置错误~!"); }
else
{ s=(LinkList)malloc(sizeof(LNode));
s->data=x;
s->next=p->next;
p->next=s;
}
}
void Del_LinkList(LinkList H,int i)
{ LinkList p,q;
p=Get_LinkList(H,i-1);
if(p==NULL)
{ printf("第i-1个节点不存在"); }
else
{ if(p->next==NULL)
{ printf("第i个节点不存在"); }
else
{q=p->next;
p->next=q->next;
free(q);
}
}
}
void Print_LinkList(LNode *L)
{ int i;
printf("线性表是:");
for( ;L!=NULL; )
{ printf("%d\t",L->data); L=L->next; }
printf("\n");
}
void main()
{ int j=-1,i;
int x;
LNode *H;
H=Creat_LinkList( );
Print_LinkList(H->next);
while(j)
{ printf(" 请选择你的操作:");
printf("1:插入操作");
printf("2:删除操作");
printf("0:退出");
scanf("%d",&j);
switch(j)
{ case 0 : printf("没有操作,退出"); break;
case 1 : printf("请输入你要插入的数和位置:");
scanf("%d%d",&x,&i);
Insert_LinkList(H,i,x);
Print_LinkList(H->next);
break;
case 2 : printf("请输入你要删除的数的位置:");
scanf("%d",&i);
Del_LinkList(H, i);
Print_LinkList(H->next);
break;
default : printf("选择错误~!");
}
}
}
我自己编的一个线性表的插入和删除操作!
我觉得编的还算比较简单!你看看吧!
起码看起来比较简单哈!
#include<stdio.h>
#include<malloc.h>
typedef struct bocai
{
int num;
struct bocai *next;
}stu;
int top()
{
printf("\n---------潇洒菠菜:最最可爱----------\n");
printf("\t1.对链表进行插入操作;\n");
printf("\t2.对链表进行删除操作;\n");
printf("\t3.显示当前链表;\n");
printf("\t4.退出程序;\n");
}
void insertValue(stu *head){
int k=1,i,x;
stu *p1,*p2;
p1=head->next;
printf("\n你要插入的位置:");
scanf("%d",&i);
i--;
while(p1!=NULL&&k<i)
{
p1=p1->next;
k++;
}
if(i>k||p1==NULL)
{
printf("\n插入位置错误\n");
}else{
printf("你要插入的值:");
scanf("%d",&x);
p2=(stu *)malloc(sizeof(stu));
p2->num=x;
p2->next=NULL;
if(i==0)
{
p2->next=head->next;
head->next=p2;
}else{
p2->next=p1->next;
p1->next=p2;
}
printf("\n潇洒菠菜提示:插入成功!\n");
display(head);
}
top();
}
void deleteValue(stu *head)
{
stu *p3;
int k=1,i;
p3=head->next;
printf("\n请输入删除位置:");
scanf("%d",&i);
i--;
while(p3!=NULL&&k<i)
{
p3=p3->next;
k++;
}
if(i>k||p3==NULL||p3->next==NULL)
{
printf("\n删除的位置错误\n");
}else{
if(i==0){
head->next=head->next->next;
}else{
p3->next=p3->next->next;
}
printf("潇洒菠菜提示:删除成功!\n");
}
top();
}
int display(stu *head)
{
stu *p;
printf("\n现链表如下:\n");
p=head->next;
while(p!=NULL)
{
printf("%d\n",p->num);
p=p->next;
}
}
int main()
{
char a;
stu *p,*head;
p=(stu *)malloc(sizeof(stu));
head=(stu *)malloc(sizeof(stu));
p->num=25;
p->next=NULL;
head->next=p;
p=(stu *)malloc(sizeof(stu));
p->num=38;
p->next=NULL;
head->next->next=p;
p=(stu *)malloc(sizeof(stu));
p->num=500;
p->next=NULL;
head->next->next->next=p;
top();
display(head);
while(1)
{
fflush(stdin);
printf("\n请输入选项:");
scanf("%c",&a);
fflush(stdin);
switch(a)
{
case '1':
insertValue(head);
break;
case '2':
deleteValue(head);
break;
case '3':
display(head);
break;
case '4':
printf("\n\t\t潇洒菠菜提示:再会...");
break;
default:
printf("\n你输入的选项有误!\n");
break;
}
if(a=='4') break;
}
scanf("%c",&a);
printf("\n");
}