
#include<stdio.h>
/* 定义ElemType为int类型 */
typedef int ElemType
#define TRUE 1
#define FALSE 0
#define flag -1
/* 单链表的结点类型 */
typedef struct LNode
{
ElemType data
struct LNode *next
} LNode,*LinkedList
/* 初始化单链表 */
LinkedList LinkedListInit()
{
LinkedList L
L=(LinkedList)malloc(sizeof(LNode))
L->next=NULL
return L
}
/* 清空单链表 */
void LinkedListClear(LinkedList L)
{
L->next=NULL
}
/* 检查单链表是否为空 */
int LinkedListEmpty(LinkedList L)
{
if (L->next==NULL) return TRUE
else return FALSE
}
/* 遍历单链表 */
void LinkedListTraverse(LinkedList L)
{
LinkedList p
p=L->next
while (p!=NULL)
{
printf("%d ",p->data)
p=p->next
}
}
//求链表长度
int LinkedListLength (LinkedList L)
{
LinkedList p
int j
p=L->next
j=0
while (p!=NULL)
{
j++
p=p->next
}
return j
}
//
LinkedList LinkedListGet (LinkedList L, int i)
{
LinkedList p
int j
p=L->next
j=1
while (p!=NULL &&j<i )
{
p=p->next
j++
}
if (j==i) return p
else return NULL
}
LinkedList LinkedListLocate ( LinkedList L, ElemType x)
{
LinkedList p
p=L->next
while ( p!=NULL &&p->data != x)
p=p->next
return p
}
void LinkedListInsert(LinkedList L, int i, ElemType x)
{
LinkedList pre,p,s
int j
pre=L
j=1
p=L->next
while (pre&&j<i)
{
pre=p
p=p->next
j++
}
if (pre==NULL)
{
printf("给的i值超过了表长")
exit(0)
}
s=(LNode *)malloc(sizeof(LNode))
s->data=x
pre->next=s
s->next=p
}
void LinkedListDel (LinkedList L,ElemType x)
{
LinkedList pre,p
int j
pre=L
j=1
p=L->next
while (p&&p->data!=x)
{
pre=p
p=p->next
j++
}
if (p==NULL)
{
printf("表中没有值为x的结点")
exit(0)
}
pre->next=p->next
free(p)
}
LinkedList LinkedListCreat( )
{
LinkedList L=LinkedListInit(),p,r
ElemType x
r=L
printf("please input data,input -1 is end\n")
scanf("%d",&x)
while (x!=flag)
{
p=(LinkedList)malloc(sizeof(LNode))
p->data=x
r->next=p
r=p
scanf("%d",&x)
}
r->next=NULL
return L
}
int main()
{
int quit=0
int i
ElemType e
LinkedList L
while (!quit)
{
int d
printf("please input the operation\n")
printf("1.初始化链表 2.清空链表3.求链表长度4.检查链表是否为空\n")
printf("5.遍历链表 6.从链表中查找元素\n")
printf("7.从链表中查找与给定元素值相同的元素在顺序表中的位置\n")
printf("8.向链表中插入元素9. 从链表中删除元素10.创建一个单链表\n")
printf("其他键退出。。。。。\n")
scanf("%d",&d)
switch (d)
{
case 1:
L=LinkedListInit()
break
case 2:
LinkedListClear(L)
break
case 3:
printf("链表长度为:%d\n",LinkedListLength(L))
break
case 4:
if (LinkedListEmpty(L))printf("true\n")
else printf("false\n")
break
case 5:
LinkedListTraverse(L)
break
case 6:
printf("请输入查找的位置.\n")
scanf("%d",&i)
printf("位置是: %d\n",LinkedListGet(L,i))
break
case 7:
printf("请输入数值.\n")
scanf("%d",&e)
printf("位置是: %d\n",LinkedListLocate(L,e))
break
case 8:
printf("请输入插入的位置和值.\n")
scanf("%d%d",&i,&e)
LinkedListInsert(L,i,e)
break
case 9:
printf("请输入删除的数值:\n")
scanf("%d",&e)
LinkedListDel(L,e)
break
case 10:
L=LinkedListCreat()
break
default:
quit=1
}
}
return 0
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct people
{
char name[10]
int age
struct people * next
}
int main()
{
struct people * head=NULL
struct people * prev , * current
int flag=1
while(flag!=0)
{
printf("请输入学生姓名,年龄:(年龄输入0结束所有输入工作)\n")
current=(struct people *)malloc(sizeof(struct people))
if(head==NULL)
head=current
else
prev->next=current
current->next=NULL
scanf("%s",&current->name)
scanf("%d",&current->age)
prev=current
flag=current->age
}
printf("Output:\n")
if(head==NULL)
printf("无资料。\n")
else
{
current=head
while(current->next!=NULL)
{
printf("姓名:%s\n年龄:%d\n\n",current->name,current->age)
current=current->next
}
}
}
至于排序,断开旧链表,将前后指针链接到新的节点就好
如果还有问题欢迎再问哈
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)