• Ashley-d
    了解作者
  • C/C++
    开发工具
  • 2KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 1
    下载次数
  • 2017-07-28 20:55
    上传日期
数据结构中单链表的创建和栈的创建,用C语言实现创建
structure.rar
  • 3 栈的实现.txt
    1.8KB
  • 2单链表的使用.txt
    3.8KB
内容介绍
// 线性表链式存储 #include<stdlib.h> #include<stdio.h> #include<math.h> #include<time.h> //创建一个有n个数据的单链表 //尾插法建立链表 /* 尾插法建立链表 每次将新的结点加到链表的表尾: 尾指针r,总是指向表中最后一结点,新节点插在他的后面 */ typedef int Elemtype ; //创建链表节点 typedef struct node { int data; struct node *next; } ListNode ,*LinkList; //尾插法初始化线性表 LinkList creatList() { srand(time(NULL)); int i,n; LinkList first=(LinkList)malloc(sizeof(ListNode)); first->next=NULL; LinkList q,r; r=first; printf("请输入您要创建链表的元素个数\n"); scanf("%d",&n); for(i=0;i<n;i++) { q=(LinkList)malloc (sizeof(ListNode));//创建新的节点; q->data=rand()%100; r->next=q; r=q; } r->next=NULL; return first;//返回头结点; } //实现对链表的插入 LinkList Insert(LinkList first,int x,int i) { ListNode *q,*newnode,*t; int k=0; q=first; newnode=(ListNode* )malloc (sizeof(ListNode));//创建新的节点; newnode->data=x; while(q!=NULL&&k<i)//找到i-1个结点 { q=q->next; k++; } if(i==1||first==NULL)//如在表头插入 { newnode->next=first->next; first->next=newnode; } else if(k==i) //如果在表中间和表未插入 { newnode->next=q->next; q->next=newnode; } //outList(first); return first; } //按照序号查找某个数值 ListNode * Locate(ListNode *first,int i) { if(i<0) return 0; LinkList p=first; int k=0; while(p!=NULL&&k<i) { p=p->next; k++; } if(k==i) return p; else { printf("您输入的顺序号不在范围内请重新输入\n"); return NULL; } } //按照元素查找线性表,并且返回它的位置 int Find(LinkList first,int x) { LinkList p=first->next; int k=1; while(p!=NULL&&p->data!=x) { p=p->next; k++; } if(p->data==x) return k; else { printf("没有您要找的数值\n"); return -1; } } //实现对链表的删除操作 删除第i个位置的元素,并且返回删除的元素值 int delete (LinkList first,int i) { int x; LinkList q,p; q=Locate(first ,i-1); if(q==NULL||q->next==NULL) return 0; p=q->next; q->next=p->next; x=p->data; free(p); return x; } void outList (ListNode *first) { LinkList temp=first->next; while(temp) { printf(" %d ",temp->data); temp =temp->next; } printf("\n"); } int main() { int code; int n,x; int del; int choice; LinkList first=NULL,L; printf("创建一链表\n"); first=creatList(); outList(first); printf("*********请输入您要执行的操作***********\n"); printf(" 1:插入元素 \n 2: 删除元素\n 3:按序号查找\n 4:按数查找\n"); printf("*********请输入非零数操作*********\n"); scanf("%d",&choice); while(choice!=0) { printf("请输入操作序号:\n"); scanf("%d",&code); switch(code) { case 1: printf("请输入您要插入元素的位置:\n"); scanf("%d",&n); printf("请输入您要插入的数值:\n"); scanf("%d",&x); printf("插入后的链表是:\n"); first= Insert(first,x,n-1); outList (first); break; case 2: printf("请输入您要删除元素的位置:\n"); scanf("%d",&n); del=delete (first,n); printf("删除的元素是 % d\n",del); printf("删除后的线性表\n"); outList(first); break; case 3: printf("请输入您要查找的序号:\n"); scanf("%d",&n); L=Locate(first,n); printf("\n该位置的结点数据值是%d \n",L->data); break; case 4: printf("请输入您想查找的数:\n"); scanf("%d",&n); x=Find(first,n); printf("该数值的位置是%d \n",x); break; default: printf("请重新输入正确数字\n"); break; } } return 0; }
评论
    相关推荐