?? 新建 文本文檔 (2).txt
字號:
#include<stdio.h>
#include<malloc.h>
#define OK 1
#define ERROR 0
typedef struct LNode{ //建立節點
int data;
struct LNode *next;
}LNode,*LinkList;
LinkList CreateList(int n);
int ListInsert(LinkList L,int i,int e);
int ListDelete(LinkList L,int i);
void Display(LinkList L);
main()
{
int n;
int i,e;
int choose=0;
LinkList L;
printf("\n********* 程序開始前,先創建單鏈表 ************\n");
printf("請輸入你要創建單鏈表結點數 :");
scanf("%d",&n);
L=CreateList(n);
printf("\n鏈表創建成功,輸出如下:\n");
Display(L);
while(choose!=3)
{
choose=0;
printf("\n你可以對單鏈表進行的操作如下 :\n");
printf("1. 插入\n2. 刪除\n3. 退出\n");
while(choose!=1&&choose!=2&&choose!=3)
{
printf("請輸入 1 或 2 或 3 選擇 插入 或 刪除 或 退出:");
scanf("%d",&choose);
if(choose!=1&&choose!=2&&choose!=3) printf("輸入錯誤,請重新輸入\n");
}
//printf(" Check choose %d\n",choose);
if(choose==1)
{
while(1)
{
printf("\n單鏈表插入前為:\n");
Display(L);
printf("請輸入要插入的數:");
scanf("%d",&e);
printf("請輸入要插入的位置:");
scanf("%d",&i);
if(ListInsert(L,i,e)==1) { printf("\n單鏈表插入后為:\n"); Display(L); break;}
else printf("輸入的插入位置錯誤,請重試\n");
}
}
else if(choose==2)
{
while(1)
{
printf("\n單鏈表刪除前為:\n");
Display(L);
printf("請輸入刪除的結點的序號:");
scanf("%d",&i);
if(ListDelete(L,i)==1) { printf("\n單鏈表刪除后為:\n"); Display(L); break; }
else printf("輸入的結點序號錯誤,請重試\n");
}
}
else if(choose==3)
{
printf("\n鏈表最后為:\n");
Display(L);
continue;
}
}
}
LinkList CreateList(int n)
{
int i,m;
LinkList L,p,s;
L=(LinkList)malloc(sizeof(LNode));
L->data=n;
p=L;
for(i=1;i<=n;i++)
{
printf("請輸入第%d個結點的值 :",i);
scanf("%d",&m);
s=(LinkList)malloc(sizeof(LNode));
s->data=m;
s->next=NULL;
p->next=s;
p=s;
}
return L;
}
int ListInsert(LinkList L,int i,int e)
{
int j=0;
LinkList p,s;
p=L;
while(p!=NULL&&j<i-1) { p=p->next; j++;}
if(p==NULL||j>i-1) { printf("插入位置錯誤"); return ERROR; }
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
L->data++;
return OK;
}
int ListDelete(LinkList L,int i)
{
int j=0;
LinkList p,temp;
p=L;
while(p!=NULL&&j<i-1) { p=p->next; j++; }
if(p==NULL||j>i-1) { printf("刪除位置錯誤"); return ERROR; }
temp=p->next;
p->next=p->next->next;
free(temp);
L->data--;
return OK;
}
void Display(LinkList L)
{
int i,n;
LinkList p;
n=L->data;
p=L->next;
printf("\n開始輸出鏈表\n");
printf("鏈表共有 %d 個結點,下面是各個結點的值 :\n",n);
for(i=1;i<=n;i++)
{
printf("結點 %d 的值 : %d\n",i,p->data);
p=p->next;
}
printf("鏈表輸出完畢\n\n");
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -