#include<stdio.h>
#include<stdlib.h>
typedef int datatype;
typedef struct Listnode{
datatype data;
struct Listnode * next;
}node, * Linklist;
node * Head;
//创建链表
void createList(){
int n=0;
char x;
node* Head,*r,*s;
Head=(node*)malloc(sizeof(node));
r=Head;
printf("\n\t建立一个线性表");
printf("\n\t请逐个输入字符,结束标记位‘x’\n");
x=getchar();
while(x!='x'){
s=(node*)malloc(sizeof(node));
n++;
s->data=x;
r->next=s;
r=s;
x=getchar();
}
r->next=NULL;
}
/* void inserAfter(p,x){
node * s;
scanf("%c",&x);
s=(node*)malloc(sizeof(node));
printf("请输入插入的位置");
s->data=x;
s->next=p->next;
p->next=s;
}*/
//插入
node *FindList_number(int i)
{
int j=0;
node *p;
p=Head->next;
while((p->next)!=NULL&&(j<i))
{
p=p->next;
j++;
}
if(j==i)
return p;
else printf("输入数据错误!!!");
}
void InsertList_befor()
{
char x;
//int y;
int i=0;
node *p,*s;
printf("请输入所要插入的第 i 位元素后 i=\t");
fflush(stdin);
scanf("%d",&i);
printf("请输入第 i 位后,所要插入的X的值X=\t");
fflush(stdin);
x=getchar();
p=FindList_number(i-1);
s=(node*)malloc(sizeof(node));
s->data=x;
s->next=p->next;
p->next=s;
//y=s->data;
//s->data=p->data;
//p=s;
}
/* void insretBefore()
{
node * p;
q=Head;
printf("请输入插入的元素");
scanf("%d",&x);
printf("请输入插在那个节点后");
findList()
if(q==NULL){
printf("error");
}else{
s=(node*)malloc(sizeof(node));
s->data=x;
while(q->next!=p){
s->next=p;
q->next=s;
}
}*/
//求链表长度的函数
void listLong(){
node * p;
int length=1;
p=Head->next;
while(p->next!=NULL){
p=p->next;
length++;
}
printf("该单链表的长度为:length=%d",length);
}
//删除节点函数
void deleteList(){
node * p,* q;
char x;
printf("请输入删除接节点的值");
scanf("%c",&x);
if(Head==NULL){
printf("\t\t链表下溢");
return;
}
if(Head->next==NULL){
printf("\t\t链表为空");
return;
}
q=Head;
p=Head->next;
while(p!=NULL && p->data!=x){
q=p;
p=p->next;
}
if(p!=NULL){
q->next=p->next;
free(p);
printf("\t\t%c已被删除");
}else{
printf("\t\t未找到!\n");
}
}
//显示链表中各个节点
void showlist(){
node*p;
p=Head->next;
printf("输出表中的内容为");
while(p!=NULL){
printf("\t\t%c",p->data);
p=p->next;
}
}
void findList(){
char x;
node*p;
int i=1;
printf("请输入要查找的元素");
scanf("%d",&x);
if(Head==NULL)
{
printf("\t\t链表下溢");
return;
}
if(Head->next==NULL){
printf("\t\t链表为空");
return;
}
p=Head->next;
while(p!=NULL&&p->data!=x){
p=p->next;
i++;
}
if(p!=NULL){
printf("\t\t在第%d位上找到值为%d的节点!",i,x);
}else{
printf("\t\t未找到值为%c的节点!\n",x);
}
}
int main(){
int choose;
int j=1;
while(j)
{
printf(" 线性表子系统\n");
printf(" ****************************\n");
printf(" * 1-------建表 *\n");
printf(" * 2-------插入 *\n");
printf(" * 3-------删除 *\n");
printf(" * 4-------显示 *\n");
printf(" * 5-------查找 *\n");
printf(" * 6-------求表长 *\n");
printf(" * 0-------返回 *\n");
printf(" ****************************\n");
printf("请输入一个数\n");
scanf("%d",&choose);
if(choose==1)
createList();
else if(choose==2)
InsertList_befor();
else
#include<stdio.h>
#include<stdlib.h>
typedef int datatype;
typedef struct Listnode{
datatype data;
struct Listnode * next;
}node, * Linklist;
node * Head;
//创建链表
void createList(){
int n=0;
char x;
node* Head,*r,*s;
Head=(node*)malloc(sizeof(node));
r=Head;
printf("\n\t建立一个线性表");
printf("\n\t请逐个输入字符,结束标记位‘x’\n");
x=getchar();
while(x!='x'){
s=(node*)malloc(sizeof(node));
n++;
s->data=x;
r->next=s;
r=s;
x=getchar();
}
r->next=NULL;
}
/* void inserAfter(p,x){
node * s;
scanf("%c",&x);
s=(node*)malloc(sizeof(node));
printf("请输入插入的位置");
s->data=x;
s->next=p->next;
p->next=s;
}*/
//插入
node *FindList_number(int i)
{
int j=0;
node *p;
p=Head->next;
while((p->next)!=NULL&&(j<i))
{
p=p->next;
j++;
}
if(j==i)
return p;
else printf("输入数据错误!!!");
}
void InsertList_befor()
{
char x;
//int y;
int i=0;
node *p,*s;
printf("请输入所要插入的第 i 位元素后 i=\t");
fflush(stdin);
scanf("%d",&i);
printf("请输入第 i 位后,所要插入的X的值X=\t");
fflush(stdin);
x=getchar();
p=FindList_number(i-1);
s=(node*)malloc(sizeof(node));
s->data=x;
s->next=p->next;
p->next=s;
//y=s->data;
//s->data=p->data;
//p=s;
}
/* void insretBefore()
{
node * p;
q=Head;
printf("请输入插入的元素");
scanf("%d",&x);
printf("请输入插在那个节点后");
findList()
if(q==NULL){
printf("error");
}else{
s=(node*)malloc(sizeof(node));
s->data=x;
while(q->next!=p){
s->next=p;
q->next=s;
}
}*/
//求链表长度的函数
void listLong(){
node * p;
int length=1;
p=Head->next;
while(p->next!=NULL){
p=p->next;
length++;
}
printf("该单链表的长度为:length=%d",length);
}
//删除节点函数
void deleteList(){
node * p,* q;
char x;
printf("请输入删除接节点的值");
scanf("%c",&x);
if(Head==NULL){
printf("\t\t链表下溢");
return;
}
if(Head->next==NULL){
printf("\t\t链表为空");
return;
}
q=Head;
p=Head->next;
while(p!=NULL && p->data!=x){
q=p;
p=p->next;
}
if(p!=NULL){
q->next=p->next;
free(p);
printf("\t\t%c已被删除");
}else{
printf("\t\t未找到!\n");
}
}
//显示链表中各个节点
void showlist(){
node*p;
p=Head->next;
printf("输出表中的内容为");
while(p!=NULL){
printf("\t\t%c",p->data);
p=p->next;
}
}
void findList(){
char x;
node*p;
int i=1;
printf("请输入要查找的元素");
scanf("%d",&x);
if(Head==NULL)
{
printf("\t\t链表下溢");
return;
}
if(Head->next==NULL){
printf("\t\t链表为空");
return;
}
p=Head->next;
while(p!=NULL&&p->data!=x){
p=p->next;
i++;
}
if(p!=NULL){
printf("\t\t在第%d位上找到值为%d的节点!",i,x);
}else{
printf("\t\t未找到值为%c的节点!\n",x);
}
}
int main(){
int choose;
int j=1;
while(j)
{
printf(" 线性表子系统\n");
printf(" ****************************\n");
printf(" * 1-------建表 *\n");
printf(" * 2-------插入 *\n");
printf(" * 3-------删除 *\n");
printf(" * 4-------显示 *\n");
printf(" * 5-------查找 *\n");
printf(" * 6-------求表长 *\n");
printf(" * 0-------返回 *\n");
printf(" ****************************\n");
printf("请输入一个数\n");
scanf("%d",&choose);
if(choose==1)
createList();
else if(choose==2)
InsertList_befor();
else if(choose==3)
deleteList();
else if(choose==4)
showlist();
else if(choose==5)
findList();
else if(choose==6)
listLong();
else if(choose==0)
j=0;
else{
printf("输入错误");
}
}
return 0;
}
(choose==3)
deleteList();
else if(choose==4)
showlist();
else if(choose==5)
findList();
else if(choose==6)
listLong();
else if(choose==0)
j=0;
else{
printf("输入错误");
}
}
return 0;
}